繁体   English   中英

单元测试配置类在 Multi Maven Spring Boot 项目中不起作用

[英]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.

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