我的Junit测试套件配置为在Windows和Linux环境中执行。我开发了两种代码实现相同的可能性。我真的不确定以下代码的操作系统独立行为。我是java的新手。请建议。
public static void main(String[] args) {
String directoryRootFromFile = null;
String directoryRootFromUserDir = null;
String propertiesPath = null;
directoryRootFromFile = new java.io.File(".").getAbsolutePath() + File.separatorChar + "data";
directoryRootFromUserDir = System.getProperty("user.dir") + File.separatorChar + "data";
propertiesPath = directoryRootFromFile + File.separatorChar + "abc.properties";
System.out.println(propertiesPath);
propertiesPath = directoryRootFromUserDir + File.separatorChar + "abc.properties";
System.out.println(propertiesPath);
}
1st Output : C:\workspace\test\.\data\abc.properties
2nd Output : C:\workspace\test\data\abc.properties
答案 0 :(得分:1)
使用相对路径。不要像Strings那样操纵路径;相反,使用Path和Paths类。使用JUnit TemporaryFolder类创建一个自动设置并拆除的测试夹具。
答案 1 :(得分:0)
假设以下源布局。
├── pom.xml
└── src
├── main
│ ├── java
│ └── resources
└── test
├── java
│ └── test
│ └── FileTest.java
└── resources
└── data
└── abc.properties
abc.properties
具有以下内容。
foo=foo property value
bar=bar property value
以下测试通过。
@Test
public void test() throws FileNotFoundException, IOException {
String testRoot = this.getClass().getResource("/").getFile();
Path path = Paths.get(testRoot, "data", "abc.properties");
File file = new File(path.toUri());
Properties prop = new Properties();
prop.load(new FileInputStream(file));
assertEquals("foo property value", prop.get("foo"));
assertEquals("bar property value", prop.get("bar"));
}