如何在春季测试中模拟财产来源?

时间:2018-10-22 15:45:04

标签: java spring spring-test spring-test-mvc

我正在为我的控制器编写单元测试,并且遇到一个问题:desktop.properties文件在我的构建服务器上不存在,也不应该在那里存在。

我有这个主要的SpringBoot类:

@Configuration
@ComponentScan(basePackages="com.xxx")
@EnableJpaRepositories(basePackages = "com.xxx")
@PropertySources(value = {@PropertySource("classpath:desktop.properties")})
@EnableAutoConfiguration(exclude={JmsAutoConfiguration.class, SecurityAutoConfiguration.class, MultipartAutoConfiguration.class})
@ImportResource(value = {"classpath:multipart.xml","classpath:column-maps-config.xml","classpath:model-ui-name-maps-config.xml"})
public class ApplicationConfig extends WebMvcConfigurerAdapter implements EnvironmentAware, WebApplicationInitializer {
}

您会注意到,此类导入desktop.properties

我有一个以以下内容开头的测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ApplicationConfig.class)
@WebAppConfiguration
public class SomeControllerTest {
}

如果我的环境没有desktop.properties文件,或者我只是删除它,则无法运行测试,因为ApplicationConfig类不能在没有依赖的情况下实例化。

我的问题是如何模拟desktop.properties或创建用于测试目的的自定义配置,以便用测试上下文替换@ContextConfiguration(classes = ApplicationConfig.class)

您能给我任何提示吗?

P.S。当前项目是一个具有旧版本的相当老的项目,因此,这是我发现的一种为控制器创建测试的方法,而对pom.xml

的更改最少

3 个答案:

答案 0 :(得分:1)

您可以尝试以下测试注释:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ApplicationConfig.class)
@ActiveProfiles("test")
@WebAppConfiguration
public class SomeControllerTest {
}

接下来,您必须在/ src / test / resources中创建特定的测试desktop.properties

答案 1 :(得分:1)

@TestPropertySource注释是在Spring集成测试中配置属性源的最简单方法。

答案 2 :(得分:0)

您可以为测试环境创建其他配置类,然后在测试中使用它。 该测试应用程序配置类将没有以下语句-

@PropertySourcesl(值= {
 @PropertySource(“ classpath:desktop.propertie s”)})

无论您在何处使用上述文件中的某些属性,都应使用一些默认值,以使它不会因任何运行时异常而失败。