2013-02-11 107 views
0

我想測試一些嚴重依賴靜態方法調用的遺留代碼。PowerMockito測試遺留代碼

基本上,我有一個類A,方法b()和c()。 A.b()返回void,並且A.c()返回一個值。

如果真正的A.b()被調用,被測試的類會拋出一個異常,所以我需要它不做任何事情。但是,如果我使用:

PowerMockito.spy(A.class); 
    PowerMockito.doNothing().when(A.class); 

然後我不能模擬A.c()返回我需要的值。這是因爲該行

PowerMockito.when(A.c()).thenReturn(value); 

拋出異常:Only void methods can doNothing()。有什麼辦法讓A.b()什麼也不做,並且「覆蓋」A.c()返回正確的值?

回答

0

我認爲您在when()之後錯過了方法調用。

爲PowerMockito API的嘗試PowerMockito.doNothing().when(A.class); A.b();

+0

PowerMockito.doNothing()。當(A.class)有void返回類型 – user472875 2013-02-11 17:05:13

1

我發現了一個變通修復該問題:

嘲笑AC(),用途:

PowerMockito.mockStatic(A.class); 
PowerMockito.when(A.c()).thenReturn(value); 

然後,就什麼也不做A.b(),加上行:

PowerMockito.suppress(PowerMockito.method(A.class, "b")); 

我覺得很骯髒。 (A.class)有void返回類型

+0

當(A.class,「b」));'也沒有'PowerMockito.doNothing()。 – 2013-02-11 17:29:03