2016-08-24 8 views
0

AWS SWFワークフローの単体テストを作成しようとしています。以下私はSWFワークフロークライアントの別のメソッドを模擬してください

@Override 
public void execute(String abc) { 
    new TryCatch() { 

     @Override 
     protected void doTry() throws Throwable { 
      Promise<SomeObject> temp = activityClient.action(abc); 
      again(temp, abc); 
     } 

     @Override 
     protected void doCatch(Throwable e) throws Throwable { 
      throw new RuntimeException(e); 
     } 
    }; 
} 


@Asynchronous 
public void again(Promise<SomeObject> someObject, String abc) { 
    // Do Something 
} 

私のテストクラスをテストしたいコードは以下の通りである:私はテストクラスの上に書き込むためにSWF Testing Docsを使用している

public class SomeWorkflowTest extends AbstractTestCase { 

    @Rule 
    public WorkflowTest workflowTest = new WorkflowTest(); 

    List<String> trace; 
    private SomeWorkflowClientFactory workflowFactory = new SomeWorkflowClientFactoryImpl(); 

    @Before 
    public void setUp() throws Exception { 

     trace = new ArrayList<String>(); 
     // Register activity implementation to be used during test run 
     SomeActivitiesImpl activitiesImpl = new SomeActivitiesImpl() { 

     @Override 
     public SomeObject performHostRecovery(String abc) { 
      trace.add("ABC: " + abc); 
      SomeObject testObject = new SomeObject(); 
      return testObject; 
     } 
    }; 
    workflowTest.addActivitiesImplementation(activitiesImpl); 
    workflowTest.addWorkflowImplementationType(SomeWorkflowImpl.class); 
} 

@Test 
public void testWorkflowExecutionCall() throws Throwable { 

      SomeWorkflowClient workflow = workflowFactory.getClient("XZY"); 
    workflow.execute("XYZ"); 

    List<String> expected = new ArrayList<String>(); 
    expected.add("ABC: abc"); 

    AsyncAssert.assertEqualsWaitFor("Wrong Wrong", expected, trace, null); 
} 

}

。しかし、私がテストしているメソッド(execute())は、同じクラスの別のメソッドを呼び出しています。私は内部メソッドの実行には関心がなく、それを模擬したいと思いますが、ワークフロークラスオブジェクトがインスタンス化される方法を考えれば、内部メソッドをどのようにモックするかについては明確ではありません。

誰かがこれを指摘できますか?

おかげ

答えて

0

あなたが実際にワークフローオブジェクトまたはワークフローがテストメソッド内で使用している他のオブジェクトをインスタンス化することができます

@Test 
public void testWorkflowExecutionCall() throws Throwable { 
    SomeWorkflow workflow = new SimpleWorkflow(...); 
    workflow.execute("XYZ"); 

    List<String> expected = new ArrayList<String>(); 
    expected.add("ABC: abc"); 

    AsyncAssert.assertEqualsWaitFor("Wrong Wrong", expected, trace, null); 
} 

WorkflowTestは、ダミーのテストワークフローのコンテキストでテストメソッドを実行して動きます。コード

SomeWorkflowClient workflow = workflowFactory.getClient("XZY"); 
workflow.execute("XYZ"); 

は実際にこのダミーワークフローのコンテキストで子ワークフローを作成します。ただし、子ワークフローを作成せずに非同期コードを直接実行することはできません。

関連する問題