JUnit-testando um método de serviço Spring @Async void

Eu tenho um serviço Spring:

@Service
@Transactional
public class SomeService {

    @Async
    public void asyncMethod(Foo foo) {
        // processing takes significant time
    }
}

E eu tenho um teste de integração para issoSomeService:

@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.
}

Aqui está o problema:

ComoSomeService.asyncMethod(..) é anotado com@Async eEnquanto oSpringJUnit4ClassRunner adere ao@Async semântica

atestAsyncMethod thread vai bifurcar a chamadasomeService.asyncMethod(testData) em seu próprio encadeamento de trabalho e continue diretamente executandoverifyResults(), possivelmente antes que o segmento de trabalho anterior tenha concluído seu trabalho.

Como posso esperarsomeService.asyncMethod(testData)conclusão antes de verificar os resultados? Observe que as soluções paraComo escrevo um teste de unidade para verificar o comportamento assíncrono usando o Spring 4 e anotações? não se aplica aqui, poissomeService.asyncMethod(testData) retornavoid, não umFuture<?>.

questionAnswers(3)

yourAnswerToTheQuestion