मैं एक स्प्रिंग सेवा है: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.
}
यहाँ समस्या है:
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)
देता है, Future<?>
नहीं।