簡體   English   中英

Junit測試模擬文件操作

[英]Junit Testing Mocking a File Operation

我有一段類似於下面的代碼,我被要求進行Junit測試。 我們正在使用Junit,EasyMock和Spring Framework。 我沒有做過多少Junit測試,而且我對如何模擬下面的內容感到有點迷茫。

基本上,當我在我的機器上編寫或運行測試時,文件的路徑就像它所在的目錄一樣。 我想知道有沒有辦法將對象模擬到臨時位置,因為它實際運行的位置保證存在並在集成測試期間進行測試。

但是我想知道這樣做是否明智,或者在目錄實際存在時與項目的其余部分集成時應該進行測試。

任何幫助表示贊賞,因為Junit測試對我來說是全新的。 我環顧四周但看不到怎樣做我想要的東西(可能是一個很好的提示,我不應該這樣做:P)。

String fileName = pathToFileName;

File file = new File(fileName);

if (file.exists()) {

    FileUtil.removeLineFromFile(file, getValueToRemove(serialNumber));
}

第一個選項是將文件注入到您的類中,您可以直接注入模擬。 通常是更好的選擇,但並不總是優雅或可行。

通過為諸如此類的有問題的對象創建受保護的包裝函數,我已經從這些事情中獲得了一些好處。 在你的考試中:

protected File OpenFile(String fileName) { return new File(filename;}

在測試類中:

File file = EasyMock.createNiceMock(File.class);

private MyClass createMyClass() {
  return new MyClass() {
    @Override protected File OpenFile(String fileName) { return file; }
  };
}

@Test public testFoo() {
  EasyMock.expect(file.exists()).andStubReturn(true);
  //...
  MyClass myClass=createMyClass();
  // ...
}

如果需要,可以在這種情況下保存構造參數(fileName)以進行驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM