Fehler bei der Konfiguration von Mockito mit Eclipse. Gibt einen Fehler: java.lang.verifyError

7

Wenn ich meine Mockito-Bibliothek zum Klassenpfad hinzufüge und ein einfaches Mockito-Beispiel zum Testen verwende, wo ich versuche, einen falschen Wert für die Funktion add mit dem Mock-Objekt zurückzugeben, bekomme ich java.lang.verifyerror. Der folgende Code wird zum Testen gefolgt von logcat verwendet.

%Vor%

Ich erhalte den folgenden Fehler. Bitte helfen Sie! Danke.

  

java.lang.VerifyError: org / mockito / cglib / core / ReflectUtils       bei org.mockito.cglib.core.KeyFactory $ Generator.generateClass (KeyFactory.java:167)       bei org.mockito.cglib.core.DefaultGeneratorStrategy.generate (DefaultGeneratorStrategy.java:25)       bei org.mockito.cglib.core.AbstractClassGenerator.create (AbstractClassGenerator.java:217)       bei org.mockito.cglib.core.KeyFactory $ Generator.create (KeyFactory.java:145)       bei org.mockito.cglib.core.KeyFactory.create (KeyFactory.java:117)       bei org.mockito.cglib.core.KeyFactory.create (KeyFactory.java:109)       bei org.mockito.cglib.core.KeyFactory.create (KeyFactory.java:105)       bei org.mockito.cglib.proxy.Enhancer. (Enhancer.java:70)       bei org.mockito.internal.creation.jmock.ClassImposterizer.createProxyClass (ClassImposterizer.java:85)       bei org.mockito.internal.creation.jmock.ClassImposterizer.imposterise (ClassImposterizer.java:62)       bei org.mockito.internal.creation.jmock.ClassImposterizer.imposterise (ClassImposterizer.java:56)       bei org.mockito.internal.creation.CglibMockMaker.createMock (CglibMockMaker.java:23)       bei org.mockito.internal.util.MockUtil.createMock (MockUtil.java:26)       bei org.mockito.internal.MockitoCore.mock (MockitoCore.java:51)       bei org.mockito.Mockito.mock (Mockito.java:1243)       bei org.mockito.Mockito.mock (Mockito.java:1120)       bei testaddmock.testadd (testaddmock.java:24)       at java.lang.reflect.Method.invokeNative (Native Methode)       bei android.test.AndroidTestRunner.runTest (AndroidTestRunner.java:191)       bei android.test.AndroidTestRunner.runTest (AndroidTestRunner.java:176)       bei android.test.InstrumentationTestRunner.onStart (InstrumentationTestRunner.java:554)       unter android.app.Instrumentation $ InstrumentationThread.run (Instrumentation.java:1701)

    
user3054298 01.12.2013, 12:14
quelle

4 Antworten

12

Standardmäßig verwendet Mockito cglib, um dynamische Proxies zu erstellen, aber für Android funktioniert das nicht, weil cglib .class-Dateien erzeugt, nicht .dex. Aber ab Version 1.9.5 bietet Mockito einen Erweiterungspunkt, der das Ersetzen der Proxy-Generierungsengine ermöglicht. Sie müssen also nur diese Engine ändern, und ich denke, Dexmaker ist die beste Variante.

Damit es funktioniert, sollten Sie dexmaker-mockito-1.0.jar zu Ihrem Projekt hinzufügen und Mockito wird es verwenden, um seine Proxies zu generieren.

    
Grimmy 15.01.2014 13:07
quelle
7

@Grimmys Antwort (+1) hat die richtige Antwort für mich.

Wenn Sie mit Android arbeiten, müssen Sie die fehlenden Gravel-Importe für Dexmaker hinzufügen.

%Vor%     
Dori 19.08.2014 15:42
quelle
2

@Grimmy dexmaker-1.0.jar ist auch notwendig.

@ user3054298 Ich traf das gleiche Problem & amp; Gelöst, indem Sie diesem Blogführer folgen: Ссылка

  

Eine neue Funktion in Mockito 1.9.5 ist die Unterstützung der Dalvik-Laufzeitumgebung von Android. Es verwendet DexMaker, um spontan Mock-Klassen zu generieren. Um Mockito auf einem Gerät oder Emulator zu verwenden, müssen Sie dem libs-Verzeichnis Ihres Testprojekts drei .jar-Dateien hinzufügen: mockito-all-1.9.5.jar, dexmaker-1.0.jar und dexmaker-mockito-1.0.jar .

    
Spec 18.02.2014 04:04
quelle
0

Ich hatte 3 Tage lang einen ähnlichen Fehler! Das Hinzufügen von Dexmaker-Bibliotheken hat gar nicht geholfen! Am Ende habe ich die Version von Power Mock auf die neuste Version 1.5.6 geändert und es hat danach gut funktioniert! Hoffe, das hilft auch jemandem.

    
sasfour 11.09.2014 21:53
quelle

Tags und Links