【发布时间】:2020-08-13 18:29:41
【问题描述】:
我有一个使用 SpringBoot 2.1.7 用 Java 编写的 REST API。 它有 2 个控制器,每个控制器都有集成测试。 控制器位于同一控制器文件夹中的单独文件中
每个控制器的集成测试也在单独的文件中。 如果我注释掉一组控制器测试,则集成测试成功。 但是,如果我尝试为两个控制器运行所有集成测试,则会出现多个故障并出现相同的错误:
java.lang.IllegalStateException:配置错误:发现测试类 [com.fedex.ground.transportation.fxglhlschedulesvc.controller.ITFacilityController] 的多个 @BootstrapWith 声明。ITFacilityController]
java.lang.IllegalStateException:配置错误:发现测试类 [com.fedex.ground.transportation.fxglhlschedulesvc.controller.ITScheduleController] 的多个 @BootstrapWith 声明。ITScheduleController]
这似乎是一个配置问题。 这就是我配置测试文件的方式: 对于设施控制器
@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})
假设在不同文件中的 2 个控制器的配置注释是什么。 控制器之间根本没有关联。
【问题讨论】:
-
在其中一项测试中尝试@DirtiesContext
-
成功了!你能把它放在答案中,以便我可以检查作为答案。这意味着什么?我也可以谷歌
-
你可以试试不包括
FxgLhlScheduleSvcApplication吗?如果您包含主要的@SpringBootApplication,它将初始化所有 bean,这对于控制器测试来说不是您想要的。
标签: java spring spring-boot