如何模拟 Spring 的 @Retryable 属性,例如 SpringBootTest 中的 maxAttemps 和延迟

How to mock Spring's @Retryable attributes such as maxAttemps and delay in SpringBootTest

我有一个正在尝试测试的方法

@Retryable(value = {SocketTimeoutException.class},
             backoff = @Backoff(delay = 10000),
             maxAttempts = 4)
public String getNewString(String oldString) throws IOException{
   ...
}

我已经像这样创建了它的测试用例:

@SpringBootTest
@RunWith(SpringRunner.class)
public class TestStrings {
  @Test(expected = SocketTimeoutException.class)
  public void testGetNewString() throws IOException {
     ...
  }

一切正常,测试用例运行 4 次,延迟 10 秒。但我想更改@Retryable 的属性,即 maxAttempts 从 4 到 2,延迟从 10s 到 0.5s 对于这个特定的测试用例。 我想这样做是为了 运行 测试用例不应该等待很长时间并且测试用例应该快速结束同时也测试重试功能。

使用

@Retryable(maxAttemptsExpression = "${max.attempts:4}", 
        backoff = @Backoff(delayExpression = "${delay:10000}"))

并在您的测试用例中设置属性。