2017-08-04 86 views
1

問題:我寫一個測試用例的方法從一個公共靜態方法與下面的代碼被稱爲:如何嘲笑「新FileOutputStram()」編寫公共靜態方法使用Powermockito

final File file = new File(filePath); 
    final OutputStream out = new FileOutputStream(file); 
    out.write(bytes); 
    out.close(); 

現在我需要模擬上面的調用。

我所寫的: -

@Before 
public void setUp() throws Exception{ 
    File myFile = PowerMockito.mock(File.class); 
    FileOutputStream outStream = PowerMockito.mock(FileOutputStream.class); 

    PowerMockito.whenNew(File.class).withAnyArguments().thenReturn(myFile);   
    PowerMockito.whenNew(FileOutputStream.class).withAnyArguments().thenReturn(outStream); 

    doNothing().when(outStream).write(Matchers.any()); 
    doNothing().when(outStream).close(); 
} 

@Test 
public void testMethod(){ 
    PowerMockito.mockStatic(StaticClassUtil.class); 
    PowerMockito.when(StaticClassUtil.uploadFile(file.getBytes(), "dummy","dummy","dummy", null)).thenReturn("dummy");   
} 

在調試,我發現沒有模擬對象在行:

final File file = new File(filePath); 

請建議在那裏我得到錯誤的。

+0

很高興閱讀您的評論,這對我來說是一次學習體驗,並且有一天我也努力推動自己也達到黃金照明徽章。:)你和我之間的 –

+2

:鑑於Illuminiator徽章是其中之一非常罕見的......它非常容易獲得。您只需回答很多問題,並且每次在答案中獲得第一個贊成票時,就可以編輯問題以改進它。換句話說:這個徽章只是關於許多答案和編輯。工作和紀律。還有其他徽章更難**。例如,有人問了100個有+1票或更多票的問題。雖然我問了+60個問題......我只有30個左右的upvotes。從這個意義上說:當你對徽章感興趣... – GhostCat

+2

努力工作以達到「審覈者」的特權...然後你可以獲得大量的徽章...只是通過工作/紀律。 – GhostCat

回答

1

很有可能您錯過了documentation中概述的步驟之一 - 可能您忘記將@PrepareForTest用於File.class和FileOutputStream.class。

但真正的答案是:你不一定直接調用在你的代碼。您可以轉而使用依賴注入框架爲您執行此操作,或者只需將OutputStream傳入到您的待測試方法中。因爲那麼你只有通過一個嘲弄的對象,你需要嘲笑那些討厭的電話new()在空氣中消失。你可以堅持使用老的Mockito而不是PowerMock(ito)。

+0

這是正確的,我當然錯過了@PrepareForTest中的File.class和FileOutputStream.class。我以某種方式繼續前進,並將在稍後在此處發現更新模式細節。 –