JUnit-testing a Spring @Async void service method

后端 未结 4 1678
情话喂你
情话喂你 2020-12-29 03:15

I have a Spring service:

@Service
@Transactional
public class SomeService {

    @Async
    public void asyncMethod(Foo foo) {
        // processing takes si         


        
4条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-29 03:45

    If you are using Mockito (directly or via Spring testing support @MockBean), it has a verification mode with a timeout exactly for this case: https://static.javadoc.io/org.mockito/mockito-core/2.10.0/org/mockito/Mockito.html#22

    someAsyncCall();
    verify(mock, timeout(100)).someMethod();
    

    You could also use Awaitility (found it on the internet, haven't tried it). https://blog.jayway.com/2014/04/23/java-8-and-assertj-support-in-awaitility-1-6-0/

    someAsyncCall();
    await().until( () -> assertThat(userRepo.size()).isEqualTo(1) );
    

提交回复
热议问题