2015-05-26 90 views
2

下面的代碼顯示了在類Sub中測試的方法 - 因此 我不需要模擬類Sub。不過,我想嘲笑 Super類和getSuperData方法。有沒有辦法使用 Mockito/Powermock? 我也想知道是否有嘲笑Super構造函數的方法? 謝謝, 史蒂夫如何模仿公共或受保護的方法從超類繼承?

public class Super { 
    private String data; 
    public Super() { 
    } 
    public String getSuperData() { 
     return data; 
    } 
} 

public class Sub extends Super { 
    Sub() { 
     super(); 
    } 
    public String methodToTest() { 
     ... 
     String data = getSuperData(); 
     ... 
    } 
} 

public class TestSub { 
    Sub sub = new Sub(); 
    Super superMock = Mockito.mock(Super.class); 
    Mockito.when(superMock.getSuperData()).thenReturn("data"); 
} 
+0

看看[這個問題](http://stackoverflow.com/questions/3467801/mockito-how-to-mock-only-the-call-of-a-method-of-the-superclass) – troig

回答

0

這是可能的,但它需要你來監視你的對象:

public class TestSub { 
    Sub sub = Mockito.spy(Sub.class); 
    Mockito.when(superMock.getSuperData()).thenReturn("data"); 
    sub.methodToTest(); 
} 

這樣你嘲笑走超級方法,作爲一個間諜讓你嘲笑方法。然而,間諜的優勢在於,對於unmocked方法,它會調用真正的實現。因此sub.methodToTest()調用仍然會調用真正的實現。

至於你的第二個問題,我知道PowerMock能夠模擬構造函數,但我不確定在這種情況下是否可能。如果您想要在構造函數中模擬某些語句,最好將它們委派給一個新方法,然後模擬此方法。

相關問題