我正在开发一个测试Web服务的应用程序,我使用JUnit parameterized tests。我想从资源文件中读取参数。 我想知道哪个是存储这些参数的最佳方式。
在.properties文件中?
test1.inputPath= C:\\Path
test1.expectedOutputPath= C:\\Path
test2.inputPath= C:\\Path2
test2.expectedOutputPath= C:\\Path2
在xml文件中?
<test>
<inputPath> C:\Path <\inputPath>
<expectedOutputPath> C:\Path <\expectedOutputPath>
<\test>
<test>
<inputPath> C:\Path2 <\inputPath>
<expectedOutputPath> C:\Path2 <\expectedOutputPath>
<\test>
其他方法吗?
感谢。
答案 0 :(得分:0)
不要试图让你的生活更复杂;)你可以用这种方式轻松阅读属性文件:
Properties prop = new Properties();
InputStream input = new FileInputStream(fileName);
prop.load(input);
String s = prop.getProperty("test1.inputPath");
并导入:
import java.util.Properties;
对你来说还很复杂吗?
答案 1 :(得分:0)
我为我的问题找到的最佳解决方案是使用Apache Commons Configuration的PropertiesConfiguration。使用起来非常简单:
在我的.properties文件中:
test1= Path1,Path2
test2= Path3,Path4
然后我自动读取.properties文件,并为每个测试检索路径作为String数组。
@Parameters
public static Collection<Object[]> readPropertiesFile(){
ArrayList<Object[]> result= new ArrayList<Object[]>();
try {
Configuration config = new PropertiesConfiguration("testPaths.properties");
Iterator<String> keys=config.getKeys();
while(keys.hasNext()){
String[] paths= config.getStringArray(keys.next());
result.add(paths);
}
} catch (ConfigurationException e) {
e.printStackTrace();
}
return result;
}
答案 2 :(得分:0)
答案当然是有很多方法可以做到。
首先问问自己:这些属性会改变吗?它们是参数还是常量? 例如,州的数量,他们将改变的机会是多少?在这种情况下,您需要一个常量,而不是参数。
现在,如果您正在寻找可在运行时更改的内容,那么您应该查看属性和资源包。
如果您只需要常量,那么您可以执行以下操作:
public interface Constants
{
public char NUMBER_ONE = '1';
public long A_LONG_TIME_AGO = 1321322;
public String CANT_BREAK_WITH_IRON_PICKAXE= "OBSIDIAN";
}
使用接口有许多优点:它们不需要实例化,不会使用IO访问减慢系统速度,并且所有属性都是静态最终的。
但是,如果需要在运行时加载值,请使用属性文件。虽然这里的所有答案都很好,但我认为唯一一个很好的是Spring的@Configuration和@ImportResource,它们被注入,允许很好的模拟,并且很好地与Spring框架的其余部分集成,并且可以很容易地用-D覆盖从命令行。
如何使用xml和属性文件的混合加载属性文件的示例:Spring-Boot: How do I reference application.properties in an @ImportResource