如何在Junit Test Suite中为Windows和Linux提供通用文件路径?

时间:2016-09-27 06:43:29

标签: java junit

我的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

2 个答案:

答案 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"));

}