试图让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'
在此先感谢,还有其他关于此的帖子,但这些帖子都没有用,而且已经好几年了。
答案 0 :(得分:2)
您的@PrepareForTest
注释可能没有运行,因为您使用的是Robolectric测试运行器,而不是PowerMock运行器。该示例未显示任何Android代码 - 如果这确实是独立测试,则切换到PowerMock运行程序。如果您确实在测试中使用Android代码,则必须研究如何在没有注释的情况下正确初始化PowerMock。