2012-02-02 218 views
4

我有一段類似於下面的代碼,我被要求進行Junit測試。我們正在使用Junit,EasyMock和Spring Framework。我沒有做過很多的Junit測試,並且在如何嘲笑下面的方面有點失落。Junit測試嘲笑文件操作

當我在我的機器上編寫或運行測試時,基本上與目錄中文件的路徑不同,我想知道是否有辦法將對象模擬到臨時位置,因爲它將實際運行的位置保證存在並在集成測試期間進行測試。

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

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

String fileName = pathToFileName; 

File file = new File(fileName); 

if (file.exists()) { 

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

回答

3

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

通過爲有問題的對象創建一個受保護的包裝函數,我已經獲得了一些里程碑。在測試下你的類:

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(); 
    // ... 
} 

如果你需要,你可以節省掉在這種情況下,用於驗證的施工參數(文件名)。

+0

'MyClass'類將不知道您在生產中創建的'file'。 – 2016-03-24 15:32:49