在main和test的resources下同时写有constant.properties文件,实验一下分别在main和test中读取properties文件有什么不同。
测试方法:
1)main:
import org.apache.log4j.Logger;
import com.sssunday.common.utils.ResourcesUtils;
public class MainTest {
public static void main(String[] args) {
Logger log = Logger.getLogger(MainTest.class);
try {
ResourcesUtils resourcesUtils = ResourcesUtils.getResouce("properties/constant");
String s = resourcesUtils.getValue("propFrom");
System.out.println(s);
}catch (Exception e) {
log.error(e.getMessage(),e);
}
}
}
import org.apache.log4j.Logger;
import org.junit.Test;
import com.sssunday.common.utils.ResourcesUtils;
public class UnitTestBySpringTest {
@Test
public void testResources() {
Logger log = Logger.getLogger(TestProject.class);
try {
ResourcesUtils resourcesUtils = ResourcesUtils.getResouce("properties/constant");
String s = resourcesUtils.getValue("propFrom");
System.out.println(s);
}catch (Exception e) {
log.error(e.getMessage(),e);
}
}
}
场景1
main/resources/properties/constant.proterties propFrom=mainRescoucestest/resources/properties/constant.proterties propFrom=testRescouces
结果 :
MainTest: mainRescouces
UnitTestBySpringTest :testRescouces
分析:main读取到main目录下面的properties文件,test读取到test目录下面的properties文件
场景2:修改test下面的资源文件名
main/resources/properties/constant.proterties propFrom=mainRescouces
test/resources/properties/constant11111.proterties propFrom=testRescouces
结果:MainTest: mainRescouces
UnitTestBySpringTest :mainRescouces
分析:main读取到main目录下面的properties文件,test也读取到main目录下面的properties文件
场景3:修改main下面的资源文件名
main/resources/properties/constant11111.proterties propFrom=mainRescouces
test/resources/properties/constant.proterties propFrom=testRescouces
结果:UnitTestBySpringTest :mainRescouces
MainTest: java.util.MissingResourceException:Can't find bundle for base name properties/constant, locale zh_CN
分析:test也读取到test目录下面的properties文件 ,main无法找到资源文件
结论:test下面的方法,可以使用全部的properties文件,读取最新的key-value(前后有同名的key,取最新的值)
main中的方法读取不到test中的properties文件,所以,单元测试将所需的properties文件放到test自己的目录下不会影响spring主程序,同时单元测试可以使用主程序中的properties。