2016-09-27 69 views
0

我的Junit測試套件配置爲在Windows和Linux環境下執行。我開發了兩種代碼實現相同的可能性。我真的不確定下面的代碼與操作系統無關的行爲。我是新來的Java。請建議。如何在Junit Test Suite中爲Windows和Linux共享文件路徑?

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

你測試了嗎?它可以在Linux和Windows上運行嗎?什麼是問題? –

+0

您應該將文件添加到classpath並使用Class.getResource() – Jens

+0

@Jim加載廣告 - 我使用Windows進行了測試並附加了結果。第一個輸出不是有效的文件路徑。 –

回答

1

使用相對路徑。不要像字符串那樣操作路徑;而是使用Path和Paths類。使用JUnit TemporaryFolder類創建一個自動設置並拆除的測試夾具。

+0

謝謝。我會考慮這個選項。 –

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

} 
相關問題