【问题标题】:PowerMockito with RoboElectric private method not mocked带有 Robolectric 私有方法的 PowerMock 未被模拟
【发布时间】:2015-02-20 20:59:07
【问题描述】:

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

public class TestPrivate {

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

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

我想运行一个名为 doTest 的测试,但使用 PowerMockito 来更改 test() 返回的内容。我在下面的尝试不起作用,当我希望我的测试返回“BAR”时,test() 返回“FOO”

@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);

    }
}

几件事:

在 PowerMockito 1.6 中使用 RoboElectric Test Runner 似乎没问题

这是我的 gradle 导入

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

提前致谢,还有其他关于此的帖子,但没有一个有效,而且已经有多年历史了。

【问题讨论】:

    标签: java junit mockito powermock


    【解决方案1】:

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

    【讨论】:

    猜你喜欢
    • 2018-10-19
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 2015-07-17
    相关资源
    最近更新 更多