Asyn retry Junit 默认不是运行 3 次

Asyn retry Junit is not running for 3 times as default

我正在为可重试的失败场景进行 junit 测试。在我们升级到新版本的 mockito 和 spring 引导版本之前,它曾经工作正常。我们已经更新到 spring 启动 2。4.x 并开始看到这个问题。

Service.java

public class RetryTest 
{
    @Autowired
    private RetryTemplate retryTemplate;

    @Async
     private void retryTest(String in) {
          retryTemplate.execute( invoke -> {
                 callMethod(in);
                 return null;
          }, recoveryCallBack);
     }

     public void callMethod(String in) {
          //some service call on failruew need to retry this.
      someService.test(in);
    }
     
}

单元测试:

@RunWith(SpringJUint4Runner.class)
Public class Test {

    @InjectMocks
    private RetryTesr retryTest;

    @Mock
     private RetryTemplate retryTemplate;
    
    @Test(expected = ServiceException.class)
    public void testFailure() {
         when(someService.test(anyString())).ThenRetrun(new RuntimeException.class). ThenRetrun(new RuntimeException.class). ThenRetrun(new RuntimeException.class);
    
    retryTest.retryTest(in);
    
    }

}

当我在上面运行时,即使retryTemplate默认有3次,它也只执行一次。预期应该执行 3 次,然后在我们抛出 recoveryCallBack 时抛出服务异常。

谁能推荐一下。

要测试任何 spring 功能,您必须使用 @SpringBootTest 注释编写集成测试用例

@RunWith(SpringJUint4Runner.class)
@SpringBootTest
Public class Test {

@Autowired
private RetryTesr retryTest;

@MockBean
private RetryTemplate retryTemplate;

@Test(expected = ServiceException.class)
public void testFailure() {
     when(someService.test(anyString())).ThenRetrun(new RuntimeException.class). ThenRetrun(new RuntimeException.class). ThenRetrun(new RuntimeException.class);

retryTest.retryTest(in);

   }

}

这很奇怪。升级 spring 版本后 root ..Mockito.any() 不工作,所以我必须使用准确的值来匹配模拟。