2014-03-04 57 views
1

有沒有辦法測試下面的類,嘲笑私有方法getMessage()在最終(實用)類中嘲諷私有靜態方法

我試過用jUnit + Mockito + PowerMock,但我找不到方法(沒有修改源代碼或做反射改變)。

有什麼想法?

public final class One { 
    public static String met1() { 
     return getMessage(); 
    } 
    private static String getMessage() { 
     return "ciao"; 
    } 
    private One() { 
     // Empty 
    } 
} 

回答

1

PowerMockito會讓你嘲笑的所有類的靜態方法,但是你需要確保你的met1方法仍然調用真正的方法:

@RunWith(PowerMockRunner.class) 
@PrepareForTest(One.class) 
public class OneTest 
{ 
    @Test 
    public void testOne() 
    { 
    PowerMockito.mockStatic(One.class); 
    try 
    { 
     PowerMockito.when(One.met1()).thenCallRealMethod(); 
     Method getMessage = PowerMockito.method(One.class, "getMessage"); 
     PowerMockito.when(getMessage.invoke(null)).thenReturn("test"); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
    assertEquals("test", One.met1()); 
    } 
} 
+0

太好了!我錯過了thenCallRealMethod()方法。非常感謝。 –