我是Spring的新手,尝试用一个简单的测试实现Spring重试。但是我不能让它工作,希望有人能告诉我我做错了什么。我还想知道,是否可以编写单元测试来验证Spring重试已经尝试了请求的最大重试次数?因为到目前为止,谷歌搜索似乎只能在集成测试中工作,因为它需要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)
你很可能尝试用
Mockito.verify(fakeParser,times(5)).add(Mockito.any());
你应该考虑第一次运行,因为当你重试5次并再次运行。即使重试5次,也应该运行6次。
你忘记了第一个例外情况,这是正常的运行行为
本文向大家介绍Spring Cloud重试机制与各组件的重试总结,包括了Spring Cloud重试机制与各组件的重试总结的使用技巧和注意事项,需要的朋友参考一下 SpringCloud重试机制配置 首先声明一点,这里的重试并不是报错以后的重试,而是负载均衡客户端发现远程请求实例不可到达后,去重试其他实例。 feign重试机制 feign默认是通过自己包下的Retryer进行重试配置,默认是5次
本文向大家介绍请你回答一下单元测试、集成测试、系统测试、验收测试、回归测试这几步中最重要的是哪一步相关面试题,主要包含被问及请你回答一下单元测试、集成测试、系统测试、验收测试、回归测试这几步中最重要的是哪一步时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 这些测试步骤分别在软件开发的不同阶段对软件进行测试,我认为对软件完整功能进行测试的系统测试很重要,因为此时单元测试和集成测试已完成,能够
我试图测试使用自定义重试策略的重试模板。为了做到这一点,我使用以下示例: https://github.com/spring-projects/spring-retry/blob/master/src/test/java/org/springframework/retry/support/retrytemplatetests.java#l57 基本上,我的目标是在得到一些特定的http错误状态(例
问题内容: 我想在我的应用程序中使用请求范围的bean。我使用JUnit4进行测试。如果我尝试在这样的测试中创建一个: 使用以下bean定义: 我得到: 但是我注意到他使用了AbstractDependencyInjectionSpringContextTests,它似乎在Spring 3.0中已被弃用。我目前使用Spring 2.5,但认为切换此方法以使用Docs建议的使用AbstractJUn
我最终做的是在测试设置过程中替换应用程序级图(MockRestAdapter就是在其中创建的
JUnit Jupiter通过使用@RepeatedTest注解方法并指定所需的重复次数,提供了重复测试指定次数的功能。每次重复测试的调用都像执行常规的@Test方法一样,完全支持相同的生命周期回调和扩展。 以下示例演示了如何声明名为repeatedTest()的测试,该测试将自动重复10次。 @RepeatedTest(10) void repeatedTest() { // ... }