2013-01-16 52 views
1

我只想編寫一個JUnit測試用例,測試下面的代碼是否已成功將目錄複製到新目錄。如何編寫將目錄複製到目錄的API的JUnit測試

File origPath = new File("/sourceDir/"); 

File newPath = new File("/destDir/"); 

try { 
    FileUtils.copyDirectory(origPath, newPath); 
    } catch (Throwable e) { 

    } 

請建議,我如何編寫JUnit測試或模擬測試上述代碼。

回答

2

的一個簡單的解決方案是檢查,從/sourceDir/所有文件是否存在於目錄/destDir/

File origPath = new File("/sourceDir/"); 
File newPath = new File("/destDir/"); 
for (File file : origPath.listFiles()) { 
    assertTrue(new File(newPath, file.getName()).exists()); 
} 
+0

有道理,謝謝.. – Sameer

2

你可以嘲笑,但這隻會測試你調用一些方法,而不是它的實際工作,即它看起來更像一個集成測試,我會簡單地創建一些實際的測試,如:

  1. 檢查假的目錄不存在(「Asdlkjslajfrhg」)嘗試複製,並確保你得到正確的例外
  2. 創建一個虛擬目錄,將其複製並確保已創建新目錄併爲空
  3. 創建一個虛擬目錄和幾個帶有數據的文件,複製該目錄並確保新目錄已創建幷包含所有具有相同內容的
  4. 文件使每個測試

注後一定要乾淨的一切:最近的JUnit的版本包括一個TemporaryFolder class,這應該幫助你處理大部分的「僞裝目錄」的部分。示例參見this post

1

除非copyDirectory方法中有很多非IO邏輯,否則在任何測試中使用mock都毫無意義,因爲它只會測試代碼調用執行其包含的操作。

所以測試將不得不:

  • 創建源目錄和文件寫入。
  • 創建目標目錄。
  • 調用copyDirectory方法。
  • 讀取目標目錄的內容並聲明內容。
  • 清理。
3

您需要TemporaryFolder規則。

@Rule 
public TemporaryFolder tempFolder = new TemporaryFolder(); 

然後創建一個新的文件夾:

File source = tempFolder.newFolder(); 

然後調用copyDirectory法:

FileUtils.copyDirectory(source.getAbsolutePath(), source.getParent() + "/dest"); 

然後你可以檢查,該文件夾是否存在:

new File(tempFolder.getRoot(), "dest").exists() 
+0

感謝您的及時回覆。 – Sameer

相關問題