Java Robolectric和Powermock试图模拟静态方法,你没有工作吗?
我使用的是Robolectric 2.1、Powermock 1.5.1,我只想编写一个静态方法测试。我只想验证,当传入false作为参数时,不会调用类的静态方法:Java Robolectric和Powermock试图模拟静态方法,你没有工作吗?,java,junit,mockito,powermock,robolectric,Java,Junit,Mockito,Powermock,Robolectric,我使用的是Robolectric 2.1、Powermock 1.5.1,我只想编写一个静态方法测试。我只想验证,当传入false作为参数时,不会调用类的静态方法: @RunWith(RobolectricTestRunner.class) @PrepareForTest(MyStaticClassToTest.class) public class TestClass { @Test public void staticMethod_shouldNeverBeCalled()
@RunWith(RobolectricTestRunner.class)
@PrepareForTest(MyStaticClassToTest.class)
public class TestClass {
@Test
public void staticMethod_shouldNeverBeCalled() throws Exception {
MyStaticClassToTest instance = new MyStaticClassToTest();
PowerMockito.mockStatic(MyStaticClassToTest.class);
PowerMockito.when(MyStaticClassToTest.staticMethod(new Context)).thenReturn("wtf?");
instance.iCallStaticMethod(false);
PowerMockito.verifyStatic(times(1)); //i want this to fail, but it keeps passing
MyStaticClassToTest.staticMethod(context);
}
}
其中我定义了一个类,如:
public class MyStaticClassToTest {
public void iCallStaticMethod(boolean yesOrNo){
if(yesOrNo) staticMethod(new Context());
}
public static String staticMethod(Context androidContext){
//do something...
return null;
}
}
为什么我的考试总是通过?我想让它验证从未调用过静态方法。为什么没有正确拼写单词?两个框架都使用类装入器自定义。所以我不确定它们是否可以同时使用。将静态调用封装在某个类中,并使用mockito对其进行模拟。或者用powermock重新定义所有Android API调用。你能发布你的确切代码吗?而不是重新打字?您可能在重新键入时出错。上面的摘录有语法错误,因此您无法从实际代码中复制/粘贴它。您是如何运行它的?@C.Ross您的设置是什么样的?PowerMock必须高于某个版本(我相信是1.4或更高版本?)