我正在尝试使用powermock和Robolectric编写一个非常简单的测试。这是我的代码:
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.robolectric.RobolectricTestRunner;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(RobolectricTestRunner.class)
@PowerMockIgnore({ "org.mockito.*", "org.robolectric.*", "android.*" })
@PrepareForTest(BadStaticClass.class)
public class SomeActivityTest {
@Test
public void testSomething() {
PowerMockito.mockStatic(BadStaticClass.class);
Mockito.when(BadStaticClass.dontWantThisMethod()).thenReturn(false);
new SomeActivity().usesStatic();
}
}
基本上,我有一个类“SomeActivity”,它有一个调用BadStaticClass.dontWantThisMethod()
的方法。我希望这个静态方法被删除。
为什么我的代码不起作用?
我一直收到如下错误:
you are trying to stub a final method, you naughty developer!
其中,我认为PowerMock的重点是看不出来。
答案 0 :(得分:0)
根据PowerMock API,您必须为某些版本的JUnit包含@RunWith(PowerMockRunner.class)
等。但您还需要使用@RunWith(RobolectricTestRunner.class)
并且不能指定多个@RunWith
在一个班级上。
那该怎么办?
我怀疑您可以保留上面的代码并引入JUnit @Rule
(请参阅:PowerMockRule docs),并在此similar post中进行了描述。请务必检查您正在使用的Jars版本,以便它们与其他SO帖子中描述的版本相匹配。除非您获得兼容版本,否则通常情况下都不会起作用,而且并不总是很明显哪些版本兼容。