I am trying to disable the static method so that unit test uses the Api REST interface.
I use...
- PowerMockito 1.5 (to enable static mockery)
- Roboelectric 1.2 (to drown out the rest of the android)
- JUnit 4.10
Executing the following code gives me the following error
Any idea on how to fix this?
@RunWith(RobolectricTestRunner.class) @PrepareForTest({Api.class}) public class ApiTest extends TestCase { @Rule public PowerMockRule rule = new PowerMockRule(); ... @Test public void testGet() throws Exception { Api.Response fakeResponse = PowerMockito.mock(Api.Response.class); PowerMockito.when(fakeResponse.getResult()).thenReturn(responseObj); mockStatic(Api.class); PowerMockito.when(Api.execute(any(HttpRequestBase.class))).thenReturn(fakeResponse); Api.get("/v1/contacts/"); } }
However, a stub on static just before we call "Api.get" produces the following error ...
java.lang.RuntimeException: java.lang.ClassNotFoundException: caught an exception while obtaining a class file for org.powermock.classloading.DeepCloner at org.powermock.api.support.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:68) at org.powermock.api.support.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:34) at org.powermock.classloading.ClassloaderExecutor.createDeepCloner(ClassloaderExecutor.java:106) at org.powermock.classloading.ClassloaderExecutor.execute(ClassloaderExecutor.java:88) at org.powermock.classloading.ClassloaderExecutor.execute(ClassloaderExecutor.java:78) at org.powermock.modules.junit4.rule.PowerMockStatement.evaluate(PowerMockRule.java:49) at com.xtremelabs.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:288) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) at org.junit.runners.ParentRunner.run(ParentRunner.java:300) at org.junit.runner.JUnitCore.run(JUnitCore.java:157) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:77) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) Caused by: java.lang.ClassNotFoundException: caught an exception while obtaining a class file for org.powermock.classloading.DeepCloner at javassist.Loader.findClass(Loader.java:360) at com.xtremelabs.robolectric.bytecode.RobolectricClassLoader.findClass(RobolectricClassLoader.java:83) at javassist.Loader.loadClass(Loader.java:312) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) at com.xtremelabs.robolectric.bytecode.RobolectricClassLoader.loadClass(RobolectricClassLoader.java:59) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:247) at org.powermock.api.support.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:66) ... 24 more Caused by: com.xtremelabs.robolectric.bytecode.IgnorableClassNotFoundException: msg because of javassist.NotFoundException: org.powermock.classloading.DeepCloner at com.xtremelabs.robolectric.bytecode.AndroidTranslator.onLoad(AndroidTranslator.java:92) at javassist.Loader.findClass(Loader.java:341) ... 31 more
source share