【发布时间】:2016-06-27 11:27:25
【问题描述】:
我正在尝试测试具有异步方法的工作流 - 设置大致如下所示:
@RunWith(FlowBlockJUnit4ClassRunner.class)
public class testWorkflow {
@Rule
public WorkflowTest workflowTest = new WorkflowTest();
@Mock
protected Activities mockActivities;
@Before
public void setUp() throws Exception {
workflowTest.addActivitiesImplementation(mockActivities);
workflowTest.addWorkflowImplementationType(Workflow.class);
workflow = workflowFactory.getClient();
}
@Test
public void testMethod1Exception() throws Throwable {
doThrow(new RuntimeException("bang!"))
.when(mockActivities).method1();
try {
runWorkflow();
fail();
} catch (Exception e) {
verify(mockActivities, never()).method2();
}
}
private void runWorkflow() throws Throwable {
AsyncScope scope = new AsyncScope() {
@Override
protected void doAsync() {
workflow.run();
}
};
scope.eventLoop();
if (!scope.isComplete()) {
System.out.println(scope.getAsynchronousThreadDumpAsString());
}
}
}
我的问题是在我的代码中,工作流程大致如下:
public class Workflow {
public void run() {
final Promise<Result> pResult = client.method1();
doAsync(pResult);
}
@Asynchronous
public void doAsync(Promise<Result> pResult) {
...
}
}
我发现单元测试命中了fail() 调用。读取getAsynchronousThreadDumpAsString 方法的输出似乎表明工作流正在等待pResult 可用于@Asynchronous 方法,但是它不可用,因为我抛出了异常。有没有办法让这样的测试工作?我试图开始工作的实际测试是测试代码在doCatch 块中的行为,但由于@Asynchronous 方法调用,工作流似乎冻结了。
【问题讨论】:
标签: java unit-testing amazon-web-services amazon-swf