を私は春のサービスがあります。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.
}
は問題です:
- としては、
@Async
と と注釈されている
SpringJUnit4ClassRunner
が@Async
セマンティクス
testAsyncMethod
スレッドへの付着としては、直接、前のワーカースレッドが作業を終えた、おそらく前に、verifyResults()
を実行し続ける、独自のワーカースレッドに呼び出しsomeService.asyncMethod(testData)
をforkします。
結果を確認する前にsomeService.asyncMethod(testData)
の完了を待つことができますか? someService.asyncMethod(testData)
がvoid
を返し、Future<?>
を返さないので、How do I write a unit test to verify async behavior using Spring 4 and annotations?の解はここでは適用されないことに注意してください。