PowerMock与Robolectric私有方法没有嘲笑

时间:2014-12-22 18:10:14

标签: java junit mockito powermock

试图让PowerMockito在这里使用RoboElectric在Android上进行单元测试。我想在测试中调用公共方法并验证某些行为,但我想更改该类中私有方法的响应。这个样本:

public class TestPrivate {

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

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

我想运行一个名为doTest的测试,但是使用PowerMockito来更改test()返回的内容。我下面的尝试不起作用,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 Test Runner似乎可以使用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'

在此先感谢,还有其他关于此的帖子,但这些帖子都没有用,而且已经好几年了。

1 个答案:

答案 0 :(得分:2)

您的@PrepareForTest注释可能没有运行,因为您使用的是Robolectric测试运行器,而不是PowerMock运行器。该示例未显示任何Android代码 - 如果这确实是独立测试,则切换到PowerMock运行程序。如果您确实在测试中使用Android代码,则必须研究如何在没有注释的情况下正确初始化PowerMock。