Java Spring启动应用程序无法为2个控制器运行集成测试
我有一个使用SpringBoot 2.1.7用Java编写的RESTAPI。 它有2个控制器,每个控制器都有集成测试。 控制器位于同一控制器文件夹中的不同文件中 每个控制器的集成测试也在单独的文件中。 如果我注释掉1组控制器测试,则集成测试成功。 但是,如果我尝试为两个控制器运行所有集成测试,则会出现多个故障,并出现相同的错误: java.lang.IllegalStateException:配置错误:找到测试类[com.fedex.ground.transportation.fxglhlschedulesvc.controller]的多个@BootstrapWith声明。ITFacilityController] java.lang.IllegalStateException:配置错误:找到测试类[com.fedex.ground.transportation.fxglhlschedulesvc.controller.ITScheduleController] 这似乎是一个配置问题。 以下是我配置测试文件的方式: 设施控制员Java Spring启动应用程序无法为2个控制器运行集成测试,java,spring,spring-boot,Java,Spring,Spring Boot,我有一个使用SpringBoot 2.1.7用Java编写的RESTAPI。 它有2个控制器,每个控制器都有集成测试。 控制器位于同一控制器文件夹中的不同文件中 每个控制器的集成测试也在单独的文件中。 如果我注释掉1组控制器测试,则集成测试成功。 但是,如果我尝试为两个控制器运行所有集成测试,则会出现多个故障,并出现相同的错误: java.lang.IllegalStateException:配置错误:找到测试类[com.fedex.ground.transportation.fxglhlsc
@ActiveProfiles("local")
@AutoConfigureMockMvc
@SpringBootTest(classes = {FxgLhlScheduleSvcApplication.class, RedisConfig.class})
@ActiveProfiles("local")
@AutoConfigureMockMvc
@SpringBootTest(classes = FxgLhlScheduleSvcApplication.class)
对于调度控制器
@ActiveProfiles("local")
@AutoConfigureMockMvc
@SpringBootTest(classes = {FxgLhlScheduleSvcApplication.class, RedisConfig.class})
@ActiveProfiles("local")
@AutoConfigureMockMvc
@SpringBootTest(classes = FxgLhlScheduleSvcApplication.class)
我尝试添加这些配置注释,但出现了相同的错误:
@WebMvcTest(ScheduleController.class)
@ContextConfiguration(classes=FxgLhlScheduleSvcApplication.class)
@WebMvcTest(FacilityController.class)
@ContextConfiguration(classes = {FxgLhlScheduleSvcApplication.class, RedisConfig.class})
假设两个控制器在不同文件中的配置注释是什么。
控制器之间根本没有关联。集成测试使用相同的ApplicationContext(除非特别设置为not)。问题是其中一个测试可以在上下文中进行更改,这会影响其他集成测试,比如更改某些bean的状态 因此,有一个注释
@DirtiesContext
,用于在该特定测试之后恢复/清除对上下文的影响
此注释的计算成本很高,因此您应该仅在必要时使用它。在一个有效的测试上尝试@DirtiesContext!你能把它写在答案里吗?这样我就可以核对一下答案了。这是什么意思?我也可以用谷歌搜索,你能不能不包括
fxglhlschedulesvc应用程序
?如果包含主@springbootplication
,它将初始化所有bean,这不是控制器测试所需的。