我有一个春季服务:的JUnit测试春天@Async无效服务方法
@Service
@Transactional
public class SomeService {
@Async
public void asyncMethod(Foo foo) {
// processing takes significant time
}
}
而且我对这个SomeService
集成测试:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@IntegrationTest
@Transactional
public class SomeServiceIntTest {
@Inject
private SomeService someService;
@Test
public void testAsyncMethod() {
Foo testData = prepareTestData();
someService.asyncMethod(testData);
verifyResults();
}
// verifyResult() with assertions, etc.
}
这里的问题是:
- as
SomeService.asyncMethod(..)
用@Async
和 注释
- 为
SpringJUnit4ClassRunner
粘附在@Async
语义
的testAsyncMethod
线程将呼叫分叉someService.asyncMethod(testData)
到自己的工作线程,然后直接继续执行verifyResults()
,以前的工作线程完成其工作可能之前。
在验证结果之前,我如何等待someService.asyncMethod(testData)
完成?请注意,How do I write a unit test to verify async behavior using Spring 4 and annotations?的解决方案在此不适用,因为someService.asyncMethod(testData)
返回void
,而不是Future<?>
。