Intereting Posts

PowerMock в Android-проекте

Привет всем пользователям powermock,

Я пытаюсь написать некоторые тестовые площадки Android с помощью Powermockito. Я использую eclipse в качестве моей IDE и запускаю тесты как «тесты Android JUnit»,

Когда я только Mockito v1.9.5 (вместе с Dexmaker-1.1.jar и Dexmaker-mockito-1.1.jar), все мои экзамены проходят. В некоторых тестах есть издевки, а некоторые нет.

Когда я добавляю файл powermock-mockito-1.5.6-full.jar в папку libs и меняю свой импорт на

import static org.powermock.api.mockito.PowerMockito.*; 

Вещи начинают ломаться. (Я просто использую mock () и когда () вызывает)

Ниже мой класс testcase:

 @RunWith(PowerMockRunner.class) @PrepareForTest({AuthSettings.class}) public class NetworkServicesImplTest extends ActivityTestCase{ @Override protected void setUp() throws Exception { super.setUp(); System.setProperty("dexmaker.dexcache", getInstrumentation().getTargetContext().getCacheDir().getPath()); Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); obj = new MyObj(); } private MyObject obj; public void testSimpleTest() { Response response = mock(Response.class); Data data = mock(Data.class); when(response.getString()).thenReturn("dummy"); obj.setString(response); String str1 = obj.getString(dsContext, data); assertEquals("dummy",str1); } public void testGetDSClientExecutionContextURL() throws MalformedURLException { DSHttpResponse response; // Mock our class HttpRequestParameters mockHttpRequest = mock(HttpRequestParameters.class); final URL url = new URL("https://"); try{ // PowerMock API whenNew(HttpRequestParameters.class).withNoArguments().thenReturn(mockHttpRequest); response = network.get(dsContext, url); }catch(Exception ex){ response = null; fail("should not have got an exception" + ex); } assertNotNull(response); } при @RunWith(PowerMockRunner.class) @PrepareForTest({AuthSettings.class}) public class NetworkServicesImplTest extends ActivityTestCase{ @Override protected void setUp() throws Exception { super.setUp(); System.setProperty("dexmaker.dexcache", getInstrumentation().getTargetContext().getCacheDir().getPath()); Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); obj = new MyObj(); } private MyObject obj; public void testSimpleTest() { Response response = mock(Response.class); Data data = mock(Data.class); when(response.getString()).thenReturn("dummy"); obj.setString(response); String str1 = obj.getString(dsContext, data); assertEquals("dummy",str1); } public void testGetDSClientExecutionContextURL() throws MalformedURLException { DSHttpResponse response; // Mock our class HttpRequestParameters mockHttpRequest = mock(HttpRequestParameters.class); final URL url = new URL("https://"); try{ // PowerMock API whenNew(HttpRequestParameters.class).withNoArguments().thenReturn(mockHttpRequest); response = network.get(dsContext, url); }catch(Exception ex){ response = null; fail("should not have got an exception" + ex); } assertNotNull(response); } 

Это Исключение в первом тестовом файле:

 java.lang.VerifyError: org/mockito/cglib/core/ReflectUtils at org.mockito.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:167) at org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217) at org.mockito.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145) at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:117) at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:109) at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:105) at org.mockito.cglib.proxy.Enhancer.<clinit>(Enhancer.java:70) at org.mockito.internal.creation.jmock.ClassImposterizer.createProxyClass(ClassImposterizer.java:85) at org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:62) at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:111) at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:60) at org.powermock.api.mockito.PowerMockito.mock(PowerMockito.java:143) at com.citrix.work.network.impl.test.NetworkServicesImplTest.testSimpleTest(NetworkServicesImplTest.java:91) at java.lang.reflect.Method.invokeNative(Native Method) at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214) at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176) at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1729) 

И последующие тестовые листы

 java.lang.NoClassDefFoundError: org/mockito/internal/creation/jmock/ClassImposterizer$3 at org.mockito.internal.creation.jmock.ClassImposterizer.createProxyClass(ClassImposterizer.java:85) at org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:62) at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:111) at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:60) at org.powermock.api.mockito.PowerMockito.mock(PowerMockito.java:143) at com.citrix.work.network.impl.test.NetworkServicesImplTest.testGetDSClientExecutionContextURL(NetworkServicesImplTest.java:107) at java.lang.reflect.Method.invokeNative(Native Method) at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214) at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176) at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1729) 

Кто-нибудь здесь успешно выполнил модульное тестирование в Android-проекте с помощью PowerMockito?

Но когда я запускал их из командной строки, задавая путь к классам, тесты выполнялись. Я проверил тест с помощью JUnit4 через

 java -cp . org.junit.runner.JUnitCore <testclass> 

Любая помощь будет высоко оценен.