我想更改.properties
文件类应该从哪个文件中获取它们
我的课现在就是这样:
public class MyClass {
private String str;
public MyClass() throws IOException {
loadProperties();
}
private void loadProperties() throws IOException {
Properties props = new Properties();
props.load(getClass().getClassLoader().getResourceAsStream("my.properties"));
str= props.getProperty("property");
}
并且whyle测试我希望从另一个文件加载属性 它是apache camel应用程序,所以我现在拥有它:
public class ConverterTest {
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new MyClass(); //--> Here i must load from another file
}
@Test
// test
}
这可以实现吗?
答案 0 :(得分:1)
只需将属性文件名传递给MyClass构造函数
即可public MyClass(String propsFile) throws IOException {
loadProperties(propsFile);
}
答案 1 :(得分:0)
你可以做点什么:
public class MyClass {
private String str;
private String path = "my.properties";
public MyClass() throws IOException {
loadProperties();
}
protected void loadProperties() throws IOException {
Properties props = new Properties();
props.load(getClass().getClassLoader().getResourceAsStream(path));
str= props.getProperty("property");
}
然后,使用代码将测试添加到同一个包中:
myClass = new MyClass();
ReflectionTestUtils.setField(path, "otherpathto.properties");
myClass.loadProperties();
它涉及代码的一个小变化,但它可能不是什么大问题......取决于你的项目。
答案 2 :(得分:0)
可以说最干净的解决方案是重构MyClass
并删除对Properties
对象的依赖,并通过构造函数注入所需的值。您的案例证明隐藏和硬编码的依赖项使测试变得复杂。
阅读属性文件并将值注入MyClass
的责任可以推回给调用者:
public class MyClass {
private final String str;
public MyClass(String strValue) {
this.str = strValue;
}
// ...
}
public class ProductionCode {
public someMethod() {
Properties props = new Properties();
props.load(getClass().getClassLoader().getResourceAsStream("my.properties"));
String str = props.getProperty("property");
MyClass obj = new MyClass(str);
obj.foo();
}
}
public class ConverterTest {
@Test
public void test() {
String testStr = "str for testing";
MyClass testee = new MyClass(testStr);
testee.foo();
// assertions
}
}