如何从 java 测试中排除 META-INF/spring.factories 中的自举
How to exclude bootstrapping in META-INF/spring.factories from java tests
resources/META-INF/spring.factories 中有此行:
org.springframework.cloud.bootstrap.BootstrapConfiguration=org.path.to.AWSConfig
使用 @RunWith(SpringRunner.class)
的集成测试执行在 运行 AWSConfig 时失败。测试不需要 AWSConfig 运行。在排除AWSConfig的SO上尝试了很多方法,包括:
@TestPropertySource(properties={"spring.autoconfigure.exclude=org.path.to.AWSConfig"})
@EnableAutoConfiguration(exclude = { AWSConfig.class})
- 设置
spring.cloud.config.enabled=false
但 AWSConfig 仍在 运行ning(并且失败)。如何从测试中排除自举配置 class?
测试设置:
@RunWith(SpringRunner.class)
@WebMvcTest(UnitLeaderRequestController.class)
@WithMockUser
public class UnitLeaderRequestControllerTest {
@Autowired
MockMvc mvc;
...
}
快速解决方案:
将此注释添加到测试 Class 排除了 bootstrapping:
@TestPropertySource(properties={"spring.cloud.bootstrap.enabled = false"})
替代解决方案:
基于How to disable Eureka and Spring Cloud Config in a WebMvcTest?
我把注释改成了@TestPropertySource(locations = "classpath:application-controller-tests.properties")
,在 /resources 中创建了 application-controller-tests.properties 并将 spring.cloud.bootstrap.enabled = false
添加到文件中,以便多个测试 类 可以使用 1 个地方的排除项。
进一步思考
可能更好的解决方法是完全停止使用 META-INF/spring.factories,并使用 bootstrap-{env}.yml 文件。我不确定从项目中删除 META-INF/spring.factories 的含义。
resources/META-INF/spring.factories 中有此行:
org.springframework.cloud.bootstrap.BootstrapConfiguration=org.path.to.AWSConfig
使用 @RunWith(SpringRunner.class)
的集成测试执行在 运行 AWSConfig 时失败。测试不需要 AWSConfig 运行。在排除AWSConfig的SO上尝试了很多方法,包括:
@TestPropertySource(properties={"spring.autoconfigure.exclude=org.path.to.AWSConfig"})
@EnableAutoConfiguration(exclude = { AWSConfig.class})
- 设置
spring.cloud.config.enabled=false
但 AWSConfig 仍在 运行ning(并且失败)。如何从测试中排除自举配置 class?
测试设置:
@RunWith(SpringRunner.class)
@WebMvcTest(UnitLeaderRequestController.class)
@WithMockUser
public class UnitLeaderRequestControllerTest {
@Autowired
MockMvc mvc;
...
}
快速解决方案:
将此注释添加到测试 Class 排除了 bootstrapping:
@TestPropertySource(properties={"spring.cloud.bootstrap.enabled = false"})
替代解决方案:
基于How to disable Eureka and Spring Cloud Config in a WebMvcTest?
我把注释改成了@TestPropertySource(locations = "classpath:application-controller-tests.properties")
,在 /resources 中创建了 application-controller-tests.properties 并将 spring.cloud.bootstrap.enabled = false
添加到文件中,以便多个测试 类 可以使用 1 个地方的排除项。
进一步思考
可能更好的解决方法是完全停止使用 META-INF/spring.factories,并使用 bootstrap-{env}.yml 文件。我不确定从项目中删除 META-INF/spring.factories 的含义。