2016-08-12 125 views
2

我正在編寫一個JUnit測試用例,該方法使用FileWriter來創建文件,但文件實際上不存在。我正在使用PowerMockito來嘲笑File對象而不創建真實文件。我的測試通過了,但仍然在項目的上下文根目錄中創建了一個名爲Mock for file,hashCode的文件。有沒有辦法避免創建這個文件?有一些類似的問題,但不清楚爲什麼會發生這種情況。所以,在調試時,我發現當代碼達到new FileWriter時,會創建該文件。使用Mockito和PowerMockito嘲笑文件

感謝,

JUnit測試:測試

@Test 
public void testCreateCSVFile() throws Exception { 
    File mockFile = Mockito.mock(File.class); 
    PowerMockito.whenNew(File.class).withAnyArguments().thenReturn(mockFile); 
    rest of the test... 
} 

方法:

public void createCSVFile(List<IUiIntegrationDto> intgList, String fileName) throws Exception { 
    FileWriter fileWriter = new FileWriter(fileName); 
    rest of the code... 
} 
+0

將作者傳遞給方法,而不是名稱。 – chrylis

+0

它的工作。我現在傳遞FileWriter而不是名稱,並且不再創建文件。謝謝。 – Jaykumar

+0

只是爲了記錄:如果您要使用依賴注入來爲其測試類提供**文件寫入器對象,則不需要轉向PowerMock。編寫可測試代碼的一個核心要點是在生產代碼中使用** new **語句(有關詳細信息,請參閱https://www.youtube.com/playlist?list=PLD0011D00849E1B79)。 – GhostCat

回答

2

你嘲諷錯場。你需要模擬FileWriter - 這是一個實際的文件寫作

+0

不管怎樣,他不妨使用'Writer'。 – chrylis

+0

我嘲笑了FileWriter,現在它創建了一個名爲「Mock for FileWriter,hashCode」的文件。 – Jaykumar

+0

@Jaykumar - 顯示完整代碼 –