1
我試圖瞭解如何使用Powermock。 我試圖實現靜態方法嘲諷here的例子。Powermock:NoClassDefFoundError嘗試模擬靜態類
我根據上面的例子創建了這段代碼。
但是當我嘗試運行測試時,我得到了一個NoClassDefFoundError。
我不知道到底是什麼導致了這個錯誤,因爲它主要是複製粘貼代碼。
// imports redacted
@RunWith(PowerMockRunner.class)
@PrepareForTest(Static.class)
public class YourTestCase {
@Test
public void testMethodThatCallsStaticMethod() throws Exception {
// mock all the static methods in a class called "Static"
PowerMockito.mockStatic(Static.class);
// use Mockito to set up your expectation
PowerMockito.when(Static.class, "firstStaticMethod", any()).thenReturn(true);
PowerMockito.when(Static.class, "secondStaticMethod", any()).thenReturn(321);
// execute your test
new ClassCallStaticMethodObj().execute();
// Different from Mockito, always use PowerMockito.verifyStatic() first
// to start verifying behavior
PowerMockito.verifyStatic(Mockito.times(2));
// IMPORTANT: Call the static method you want to verify
Static.firstStaticMethod(anyInt());
// IMPORTANT: You need to call verifyStatic() per method verification,
// so call verifyStatic() again
PowerMockito.verifyStatic(); // default times is once
// Again call the static method which is being verified
Static.secondStaticMethod();
// Again, remember to call verifyStatic()
PowerMockito.verifyStatic(Mockito.never());
// And again call the static method.
Static.thirdStaticMethod();
}
}
class Static {
public static boolean firstStaticMethod(int foo) {
return true;
}
public static int secondStaticMethod() {
return 123;
}
public static void thirdStaticMethod() {
}
}
class ClassCallStaticMethodObj {
public void execute() {
boolean foo = Static.firstStaticMethod(2);
int bar = Static.secondStaticMethod();
}
}
可悲的是沒有解決的NoClassDefFoundError錯誤。 – Philippe
你的classpath是如何設置的? – 2017-04-19 09:57:43
'NoClassDefFoundError'堆棧跟蹤是否顯示缺少的類? – 2017-04-19 11:48:08