Mockito бросает java.lang.NoClassDefFoundError и java.lang.VerifyError

У меня есть эти два класса (SimManager и Sim), для которых я хочу создать фиктивные объекты, а затем использовать из них методы-заглушки.

1  public class ContactTypeTest extends AndroidTestCase {
2  
3    @Override
4    public void setUp() throws Exception {
5      super.setUp();
6    
7      SimManager mockSimManager = mock(SimManager.class);
8      Sim mockSim = mock(Sim.class);
9       
10     when(mockSim.getOperator()).thenReturn("operator");
11     when(mockSim.getCircle()).thenReturn(circle);
12     when(mockSimManager.findSimBySerial("simSerial")).thenReturn(mockSim);
13    
14   }
15
16 }

тесты выдают эти две трассировки ошибок в строке № 9 выше.

первый:

java.lang.VerifyError: org/mockito/cglib/core/ReflectUtils в org.mockito.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:167) в org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy .java:25) на org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217) на org.mockito.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145) на org.mockito. cglib.core.KeyFactory.create(KeyFactory.java:117) в org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:109) в org.mockito.cglib.core.KeyFactory.create(KeyFactory.java: 105) в org.mockito.cglib.proxy.Enhancer.(Enhancer.java:70) в org.mockito.internal.creation.jmock.ClassImposterizer.createProxyClass(ClassImposterizer.java:85) в org.mockito.internal.creation. jmock.ClassImposterizer.imposterise(ClassImposterizer.java:62) на org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:56) на org.mockito.interna l.creation.CglibMockMaker.createMock(CglibMockMaker.java:23) в org.mockito.internal.util.MockUtil.createMock(MockUtil.java:26) в org.mockito.internal.MockitoCore.mock(MockitoCore.java:51) в org.mockito.Mockito.mock(Mockito.java:1243) в org.mockito.Mockito.mock(Mockito.java:1120) в in.mubble.bi.test.core.message.ContactTypeTest.setUp(ContactTypeTest.java :25) в android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191) в android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176) в android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554) в android .app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1741)

второй:

java.lang.NoClassDefFoundError: org/mockito/internal/creation/jmock/ClassImposterizer$3 в org.mockito.internal.creation.jmock.ClassImposterizer.createProxyClass(ClassImposterizer.java:85) в org.mockito.internal.creation.jmock. ClassImposterizer.imposterise(ClassImposterizer.java:62) в org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:56) в org.mockito.internal.creation.CglibMockMaker.createMock(CglibMockMaker.java:23) в org.mockito.internal.util.MockUtil.createMock(MockUtil.java:26) в org.mockito.internal.MockitoCore.mock(MockitoCore.java:51) в org.mockito.Mockito.mock(Mockito.java:1243 ) в org.mockito.Mockito.mock(Mockito.java:1120) в in.mubble.bi.test.core.message.ContactTypeTest.setUp(ContactTypeTest.java:25) в android.test.AndroidTestRunner.runTest(AndroidTestRunner. java:191) в android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176) в android.test.InstrumentationTestRunner.onStart(Instrume ntationTestRunner.java:554) в android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1741)

Я добавил mockito-all-1.9.5.jar в свою папку libs, а также добавил его для создания путей. Я не понимаю, в чем проблема. Пожалуйста помоги.


person dirtydexter    schedule 04.11.2014    source источник


Ответы (1)


Я думаю, вам нужно использовать Dexmaker.

Взгляните на эту тему:

Динамические прокси Mockito для Android

person alfcope    schedule 04.11.2014
comment
Теперь идет эта трассировка исключения: java.lang.NoClassDefFoundError: com.google.dexmaker.stock.ProxyBuilder на com.google.dexmaker.mockito.DexmakerMockMaker.createMock(DexmakerMockMaker.java:56) на org.mockito.internal.util. MockUtil.createMock(MockUtil.java:26) в org.mockito.internal.MockitoCore.mock(MockitoCore.java:51) в org.mockito.Mockito.mock(Mockito.java:1243) в org.mockito.Mockito.mock (Мокито.java:1120) - person dirtydexter; 05.11.2014
comment
Я не эксперт по Android, но похоже, что у вас нет зависимостей dexmaker от вашего пути к классам. - person alfcope; 05.11.2014
comment
Да, видимо, я использовал не ту банку для dexmaker, но теперь обе банки добавлены, как указано здесь code.google.com/p/dexmaker/downloads/list - person dirtydexter; 05.11.2014
comment
Но теперь я снова получаю эту трассировку. (619) 11-05 18:03:49.215: W/dalvikvm(2540): ссылка класса 'Lorg/mockito/cglib/transform/AbstractProcessTask;' не удалось 11-05 18:03:49.220: W/ClassPathPackageInfoSource(2540): не удается загрузить класс. Убедитесь, что он есть в вашем apk. Имя класса: «org.mockito.cglib.transform.AbstractProcessTask». Сообщение: org.mockito.cglib.transform.AbstractProcessTask - person dirtydexter; 05.11.2014
comment
Похоже, вам нужны библиотеки в вашем apk. Взгляните на эту ссылку: stackoverflow.com/questions/15617610/< /а> - person alfcope; 05.11.2014
comment
Да, я был там, и я уже добавил все библиотеки в свои пути сборки и зависимостей. - person dirtydexter; 06.11.2014
comment
Это все еще сломано для меня. 3 года спустя :( - person tricknology; 28.12.2017