Проблема конфигурации Mockito с затмением. Дает об ошибке: java.lang.verifyError

голоса
7

Когда я добавить свою библиотеку Mockito к классу пути, и использовать простой Mockito пример для тестирования, где я пытаюсь вернуть неверное значение для функции добавления с помощью фиктивного объекта, я получаю java.lang.verifyerror. Ниже приводится код, который используется для тестирования с последующим LogCat.

    @Test
    public void testadd()
    {
        maincode obj2=mock(maincode.class);
        when(obj2.add(0, 0)).thenReturn(9);
        assertEquals(obj2.add(0, 0),9); 
    }

Я получаю следующее сообщение об ошибке. Пожалуйста помоги! спасибо.

java.lang.VerifyError: орг / Mockito / CGLIB / ядро ​​/ 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.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) в testaddmock.testadd (testaddmock.java:24) при java.lang.reflect.Method.invokeNative (нативный метод) при 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:1701)

Задан 01/12/2013 в 13:14
источник пользователем
На других языках...                            


4 ответов

голоса
12

По умолчанию, Mockito использует CGLIB для создания динамических прокси, но для Android это не будет работать, потому что CGLIB генерирует файлы .class, не .dex. Но начиная с версии 1.9.5 Mockito предлагает точку расширения , что позволяет заменить двигатель прокси поколения, так что все , что вам нужно изменить этот двигатель , и я думаю , что Dexmaker это лучший вариант.

Таким образом , чтобы сделать его работу вы должны просто добавить dexmaker-Mockito-1.0.jar к вашему проекту, и Mockito будет использовать его для создания своих доверенных лиц.

Ответил 15/01/2014 в 14:07
источник пользователем

голоса
7

@Grimmys ответ (+1) имеет правильный ответ для меня.

При запуске на Android , добавив недостающий импорт Gradle для Dexmakerэто все то будет требуется

androidTestCompile 'org.mockito:mockito-core:1.9.5' 
androidTestCompile 'com.google.dexmaker:dexmaker:1.1' 
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.1'
Ответил 19/08/2014 в 16:42
источник пользователем

голоса
2

@Grimmy dexmaker-1.0.jar также нуждается.

@ user3054298 я встретил ту же проблему и решить, следуя руководство этого блога: http://corner.squareup.com/2012/10/mockito-android.html

Новая функция в Mockito 1.9.5 является поддержка выполнения Dalvik Android. Он использует DexMaker для создания фиктивных классов на лету. Для того, чтобы использовать Mockito на устройстве или эмуляторе, вам нужно добавить три .jar файлы в директории LIBS вашего тестового проекта: Mockito-все-1.9.5.jar, dexmaker-1.0.jar и dexmaker-Mockito-1.0.jar ,

Ответил 18/02/2014 в 05:04
источник пользователем

голоса
0

Я застрял на аналогичной ошибки в течение 3 дней! Добавление библиотек dexmaker не помогает вообще! В конце концов я изменил версию мощности издеваться до последней 1.5.6 и он работал отлично после этого! Надеюсь, что это поможет кому-то, как хорошо.

Ответил 11/09/2014 в 22:53
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more