【发布时间】:2021-12-06 09:56:02
【问题描述】:
我是 Spring 新手,正在尝试通过一个简单的测试来实现 Spring Retry。 但是我不能让它工作,希望有人能告诉我我做错了什么。 另外我想知道,是否可以编写单元测试来验证 Spring Retry 是否已尝试请求的最大重试次数?因为从谷歌搜索来看,它似乎只能在集成测试中工作,因为它需要Spring首先设置上下文。
这是我的主要课程:
@SpringBootApplication
public class SpringtestApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(SpringtestApplication.class).run(args);
}
}
配置类
@Configuration
@EnableRetry
public class FakeConfiguration implements ApplicationRunner {
private final FakeParser fakeParser;
public FakeConfiguration(FakeParser fakeParser) {
this.fakeParser = fakeParser;
}
@Override
public void run(ApplicationArguments args) {
this.runParser();
}
@Retryable(maxAttempts = 5, value = RuntimeException.class)
public void runParser() {
fakeParser.add();
}
}
组件/服务类:
@Component
public class FakeParser {
public int add(){
int result = 113;
return result;
}
}
它的重试测试:
@RunWith(SpringRunner.class)
@SpringBootTest
class SpringtestApplicationTests {
@Autowired
private FakeConfiguration fakeConfiguration;
@MockBean
private FakeParser fakeParser;
@Test
public void retry5times(){
when(fakeParser.add()).thenThrow(RuntimeException.class);
try {
fakeConfiguration.runParser();
} catch (RuntimeException e){
}
verify(fakeParser, times(5)).add();
}
}
但是,测试没有通过:
org.mockito.exceptions.verification.TooManyActualInvocations:
fakeParser bean.add();
Wanted 5 times:
-> at com.example.springtest.SpringtestApplicationTests.retry5times(SpringtestApplicationTests.java:43)
But was 6 times:
-> at com.example.springtest.FakeConfiguration.runParser(FakeConfiguration.java:26)
-> at com.example.springtest.FakeConfiguration.runParser(FakeConfiguration.java:26)
-> at com.example.springtest.FakeConfiguration.runParser(FakeConfiguration.java:26)
-> at com.example.springtest.FakeConfiguration.runParser(FakeConfiguration.java:26)
-> at com.example.springtest.FakeConfiguration.runParser(FakeConfiguration.java:26)
-> at com.example.springtest.FakeConfiguration.runParser(FakeConfiguration.java:26)
【问题讨论】:
-
请贴出整个测试方法。我没有看到失败的断言
-
对不起,我发布了错误的测试。现在已经更正了
-
看看Spock。我不会使用其他任何东西,尤其是用于 Spring Boot,它本机支持。
标签: java spring-boot testing