Spring jUnit测试属性文件

时间:2015-10-06 15:58:07

标签: java spring junit spring-junit

我有一个jUnit Test,它有自己的属性文件(application-test.properties)和它的spring配置文件(application-core-test.xml)。

其中一个方法使用spring config实例化的对象,它是一个spring组件。类中的一个成员从application.properties派生它的值,application.properties是我们的主要属性文件。通过jUnit访问此值时,它始终为null。我甚至尝试更改属性文件以指向实际的属性文件,但这似乎不起作用。

以下是我访问属性文件对象的方法

<assemblyBinding>

3 个答案:

答案 0 :(得分:31)

首先,@PropertySource中的application.properties应该读取application-test.properties,如果这是文件的名称(匹配这些事情):

@PropertySource("classpath:application-test.properties ")

该文件应位于/src/test/resources类路径下(位于根目录下)。

我不明白你为什么要为一个名为application-test.properties的文件指定一个硬编码的依赖项。该组件仅用于测试环境吗?

通常要做的是在不同的类路径上使用相同名称的属性文件。根据您是否正在运行测试,您可以加载其中一个。

在一个典型的应用程序中,你有:

src/test/resources/application.properties

src/main/resources/application.properties

然后像这样注入:

@PropertySource("classpath:application.properties")

更好的做法是将该属性文件作为bean暴露在spring上下文中,然后将该bean注入任何需要它的组件中。这样,您的代码就不会出现对application.properties的引用,您可以使用任何您想要的属性作为源代码。这是一个例子:how to read properties file in spring project?

答案 1 :(得分:20)

对于测试,您应该使用Spring 4.1,它将覆盖在其他地方定义的属性:

{{1}}

测试属性源的优先级高于从操作系统环境或Java系统属性加载的属性源以及应用程序添加的属性源,如@PropertySource

答案 2 :(得分:1)

我遇到了同样的问题,花了太多的卡路里来寻找正确的解决方案,直到我决定对文件读取进行调整为止

Properties configProps = new Properties();
InputStream iStream = new ClassPathResource("myapp-test.properties").getInputStream();
InputStream iStream = getConfigFile();
configProps.load(iStream);