我刚刚将一个应用程序从Spring Boot1.x迁移到2.1。我的一个测试由于bean重写默认值的更改而失败
我试图将spring.main.allow-bean-definition-overring
设置为true
,但这不起作用。
您可以使用以下类再现此问题:
@Configuration
public class ClockConfig {
@Bean
public Clock clock() {
return Clock.systemUTC();
}
}
@Service
public class MyService {
private final Clock clock;
public MyService(Clock clock) {
this.clock = clock;
}
public Instant now() {
return clock.instant();
}
}
@RestController
public class MyResource {
private final MyService myService;
public MyResource(MyService myService) {
this.myService = myService;
}
@GetMapping
public ResponseEntity<Instant> now() {
return ResponseEntity.ok(myService.now());
}
}
不及格的测试。Spring Boot2.1从不调用clock()
方法,而Spring Boot1.5或Spring Boot2.0则调用了它。
@RunWith(SpringRunner.class)
@WebMvcTest(MyResource.class)
@ContextConfiguration(classes = MyService.class)
public class ResourceTest {
@Autowired
private MockMvc mvc;
@Test
public void test() {
}
@TestConfiguration
static class TestConfig {
@Bean
public Clock clock() {
return Clock.fixed(Instant.MIN, ZoneId.of("Z"));
}
}
}
尝试修改ContextConfiguration注释。它应该是:@contextConfiguration(classes={MyService.class,ClockConfig.class})
。您用@ContextConfiguration注释显式指定了要在测试中导入的配置,这样就不会加载@testconfiguration
。如果排除@contextconfiguration
,它可以工作。由于您删除了myservice
的配置,因此必须在测试配置中提供myservice
bean。试试看:
@RunWith(SpringRunner.class)
@WebMvcTest(MyResource.class)
public class DemoApplicationTests {
@Autowired
private MockMvc mvc;
@Test
public void test() {
}
@TestConfiguration
static class TestConfig {
@Bean
public Clock clock() {
return Clock.fixed(Instant.MIN, ZoneId.of("Z"));
}
@Bean
public MyService service() {
return new MyService(clock());
}
}
}
问题内容: 假设我有以下python代码: 我想调用external()返回“字符串已被嵌套函数更改!”,但我得到了“”。我得出结论,Python认为该行是对inner()局部的新变量的声明。我的问题是:如何告诉Python应该使用external()字符串?我不能使用关键字,因为字符串不是全局的,它只存在于外部作用域中。有想法吗? 问题答案: 在Python 3.x中,可以使用关键字: 在Pyt
对不起我的英语。我对junit测试有问题。客户机要求覆盖所有类,即使是dto/model/entity(即使是错误的,我也必须这样做)。但我在测试getter和setter时遇到困难。我无法覆盖,我已经测试了许多解决方案,但要么覆盖率为0,要么出现错误,我该怎么办? 我的班级: 我的班级测试 always error,例如last when:when()需要的参数必须是“模拟的方法调用”。例如:w
11.3. 测试覆盖率 就其性质而言,测试不可能是完整的。计算机科学家Edsger Dijkstra曾说过:“测试能证明缺陷存在,而无法证明没有缺陷。”再多的测试也不能证明一个程序没有BUG。在最好的情况下,测试可以增强我们的信心:代码在很多重要场景下是可以正常工作的。 对待测程序执行的测试的程度称为测试的覆盖率。测试覆盖率并不能量化——即使最简单的程序的动态也是难以精确测量的——但是有启发式方法
我可以在声纳获得单位测试覆盖率通过使用Jacoco工具的代码覆盖率,并使用其报告在声纳属性文件为'sonar.jacoco.report路径=.../Reports/report.exec'。如何通过使用RAD的默认插件获得SONAR中的单元测试覆盖率,该插件以. coveragedata、. Analysis和. html格式生成报告?
问题内容: 我有这个简单的代码: 我期望它可以打印,但是可以打印。这里发生了什么? 问题答案: 这是因为在循环中,您使用 副本 而不是slice / array元素本身进行操作。 将使得它遍历元素的副本,并追加此一时,循环变量的地址- 这是在所有的迭代相同。因此,您将相同的指针添加3次。而且此临时变量将在最后一次迭代(数组的最后一个元素)中设置为,因此这就是为什么您看到该变量打印了3次的原因。 修