[英]Unit Test a configuration class not working in Multi Maven Spring Boot project
我正在使用 SpringBoot 框架开发多模块 Maven 项目。 项目分为4个模块:rest模块、service模块、repository模块、domain模块。 我正在尝试为位于服务模块中的 java 中的配置类编写单元测试。 我已经简化了案例以摆脱业务逻辑的复杂性。 配置类如下:
@Configuration
@ConfigurationProperties(prefix = "x.y.feature", ignoreInvalidFields = false)
public class FeatureConfig {
private String featureUrl;
public String getFeatureUrl() {
return featureUrl;
}
public void setFeatureUrl(String FeatureUrl) {
this.featureUrl = featureUrl;
}
}
属性文件是 application.properties。
x.y.feature.featureUrl=featureUrl
下面是不起作用的单元测试。
@RunWith(SpringRunner.class)
@SpringBootTest(classes = { FeatureConfigTest.class })
public class FeatureConfigTest {
@Autowired
private FeatureConfig featureConfig;
@Test
public void testgetFeatureUrl() {
String expected ="featureUrl";
assertEquals(expected,featureConfig.getFeatureUrl());
}
}
当我运行单元测试时,它会抛出以下异常:
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:108)
问题是您正在尝试使用应用程序上下文中的 FeatureConfig 对象。 您尚未初始化应用程序上下文。 当您使用 @Autowire 注释时,您将字段“featureConfig”与位于应用程序上下文中的 FeatureConfig 类类型的实例进行映射。 要绕过此错误,您需要初始化应用程序上下文。
首先,在测试类中创建静态类,这将帮助我们不加载整个应用程序上下文。 因为对于这个测试用例,您不需要加载整个应用程序。 首先,在测试类中创建静态类,这将帮助我们不加载整个应用程序上下文。 因为对于这个测试用例,您不需要加载整个应用程序。
@EnableConfigurationProperties(FeatureConfig.class)
public static class TestConfiguration {
}
之后,您启动应用程序上下文,但将您创建的静态类作为配置传递。 这样做不是为了加载整个应用程序上下文。
@SpringBootTest(classes = { FeatureConfigTest.TestConfiguration class })
将下面的更改复制并粘贴到您的测试类中,一切正常。
@RunWith(SpringRunner.class)
@SpringBootTest(classes = { FeatureConfigTest.TestConfiguration class })
public class FeatureConfigTest {
@Autowired
private FeatureConfig featureConfig;
@Test
public void testgetFeatureUrl() {
String expected ="featureUrl";
assertEquals(expected,featureConfig.getFeatureUrl());
}
@EnableConfigurationProperties(FeatureConfig.class)
public static class TestConfiguration {
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.