2014-12-22 93 views
0

試圖讓PowerMockito去這裏用RoboElectric進行Android上的單元測試。我想在測試中調用一個公共方法並驗證一些行爲,但我想更改該類中私有方法的響應。此示例:PowerMockito與RoboElectric私有方法不嘲弄

public class TestPrivate { 

    public String doTest() { 
     return test(); 
    } 

    private String test() { 
     return "FOO"; 
    } 
} 

我想運行一個名爲doTest的測試,但使用PowerMockito來更改test()返回的內容。下面我嘗試不起作用,測試()返回「FOO」的時候,我期望我的測試返回「BAR」

@RunWith(RobolectricTestRunner.class) 
@PrepareForTest(TestPrivate.class) 
public class WebSocketClientTest extends TestCase { 


    @Test 
    public void testConnect() throws Exception { 

     TestPrivate spy = PowerMockito.spy(new TestPrivate()); 
     doReturn("BAR").when(spy, method(TestPrivate.class, "test")); 
     String response = spy.doTest(); 
     assertEquals("BAR", response); 

    } 
} 

幾件事情:

使用RoboElectric測試運行似乎確定與PowerMockito 1.6

這是我gradle這個進口提前

androidTestCompile 'junit:junit:4.11' 
    androidTestCompile 'org.robolectric:robolectric:2.4' 
    androidTestCompile 'org.powermock:powermock-mockito-release-full:1.6.0' 

謝謝,有關於這個的其他職位,但他們沒有工作,是歲。

回答

2

您的@PrepareForTest註釋很可能沒有運行,因爲您使用的是Robolectric測試運行器而不是PowerMock運行器。該示例沒有顯示任何Android代碼 - 如果這確實是一個獨立的測試,那麼切換到PowerMock運行器。如果你真的在測試中使用Android代碼,你將不得不考慮如何在沒有註解的情況下正確初始化PowerMock。

+0

謝謝湯姆 - 是的,我不明白賽跑者。這個程序讓我使用電動跑步機進行測試:https://github.com/robolectric/robolectric/issues/1058 – bsautner