繁体   English   中英

Spring 引导应用程序无法运行 2 个控制器的集成测试

[英]Spring Boot Application cannot run integration tests for 2 controllers

我有一个使用 SpringBoot 2.1.7 用 Java 编写的 REST API。 它有 2 个控制器,每个 controller 都有集成测试。 控制器位于同一 controller 文件夹中的单独文件中在此处输入图像描述

每个 controller 的集成测试也在单独的文件中。 如果我注释掉一组 controller 测试,则集成测试成功。 但是,如果我尝试为两个控制器运行所有集成测试,则会出现多个故障并出现相同的错误:

java.lang.IllegalStateException:配置错误:发现@BootstrapWith 的多个声明用于测试 class [com.fedex.ground.transportation.fxglhlschedulesvc.Z594C103F2C6E01E0C1DAZ.059F0E04C1DAZ. ITF 设施控制器]

java.lang.IllegalStateException:配置错误:发现@BootstrapWith 的多个声明用于测试 class [com.fedex.ground.transportation.fxglhlschedulesvc.Z594C103F2C6E01E0C1DAZ.059F0E04C1DAZ. 它调度控制器]

这似乎是一个配置问题。 这就是我配置测试文件的方式:对于设施 Controller

@ActiveProfiles("local")
@AutoConfigureMockMvc
@SpringBootTest(classes = {FxgLhlScheduleSvcApplication.class, RedisConfig.class})

对于时间表 Controller

@ActiveProfiles("local")
@AutoConfigureMockMvc
@SpringBootTest(classes = FxgLhlScheduleSvcApplication.class)

我尝试添加这些配置注释,但得到相同的错误:

@WebMvcTest(ScheduleController.class)
@ContextConfiguration(classes=FxgLhlScheduleSvcApplication.class)

@WebMvcTest(FacilityController.class)
@ContextConfiguration(classes = {FxgLhlScheduleSvcApplication.class, RedisConfig.class})

对于单独文件中的 2 个控制器,配置注释应该是什么。 控制器之间根本没有关联。

集成测试使用相同的 ApplicationContext(除非特别设置为不使用)。 问题在于其中一个测试可以在上下文中进行更改,这会影响其他集成测试,例如更改某些 bean 的 state。

出于这个原因,有一个注释@DirtiesContext在这个特定的测试之后恢复/清除对上下文的影响。

此注释的计算成本很高,因此您应该仅在必要时使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM