Wie kann ich Mockito in androidTest arbeiten lassen?

8

Wie kann ich in meinem Test eine Klasse verspotten, die ich geschrieben habe?

Hier ist mein Testcode:

%Vor%

Beispiel ist nur eine Dummy-Klasse.

%Vor%

Wie kann ich diesen Fehler beheben?

  

java.lang.VerifyError: org / mspitho / cglib / core / ReflectUtils um   org.mockito.cglib.core.KeyFactory $ Generator.generateClass (KeyFactory.java:167)   beim   org.mockito.cglib.core.DefaultGeneratorStrategy.generate (DefaultGeneratorStrategy.java:25)   beim   org.mockito.cglib.core.AbstractClassGenerator.create (AbstractClassGenerator.java:217)   beim   org.mockito.cglib.core.KeyFactory $ Generator.create (KeyFactory.java:145)   bei org.mockito.cglib.core.KeyFactory.create (KeyFactory.java:117) um   org.mockito.cglib.core.KeyFactory.create (KeyFactory.java:109) um   org.mockito.cglib.core.KeyFactory.create (KeyFactory.java:105) um   org.mockito.cglib.proxy.Enhancer (Enhancer.java:70) um   org.mockito.internal.creation.cglib.ClassImposterizer.createProxyClass (ClassImposterizer.java:95)   beim   org.mockito.internal.creation.cglib.ClassImposterizer.imposterise (ClassImposterizer.java:57)   beim   org.mockito.internal.creation.cglib.ClassImposterizer.imposterise (ClassImposterizer.java:49)   beim   org.mockito.internal.creation.cglib.CglibMockMaker.createMock (CglibMockMaker.java:24)   bei org.mockito.internal.util.MockUtil.createMock (MockUtil.java:33) um   org.mockito.internal.MockitoCore.mock (MockitoCore.java:59) um   org.mockito.Mockito.spy (Mockito.java:1368)

     

bei java.lang.reflect.Method.invokeNative (Native Methode) bei   java.lang.reflect.Method.invoke (Methode.java:515) um   org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall (FrameworkMethod.java:50)   beim   org.junit.internal.runners.model.ReflectiveCallable.run (ReflectiveCallable.java:12)   beim   org.junit.runners.model.FrameworkMethod.invokeExplosively (FrameworkMethod.java:47)   beim   org.junit.internal.runners.statements.RunBefores.evaluate (RunBefores.java:24)   beim   org.junit.internal.runners.statements.RunAfters.evaluate (RunAfters.java:27)   an org.junit.runners.ParentRunner.runLeaf (ParentRunner.java:325) um   org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:78)   beim   org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:57)   bei org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:290) um   org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:71) um   org.junit.runners.ParentRunner.runChildren (ParentRunner.java:288) um   org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58) um   org.junit.runners.ParentRunner $ 2.evaluate (ParentRunner.java:268) um   org.junit.runners.ParentRunner.run (ParentRunner.java:363) um   org.junit.runners.Suite.runChild (Suite.java:128) um   org.junit.runners.Suite.runChild (Suite.java:27) bei   org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:290) um   org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:71) um   org.junit.runners.ParentRunner.runChildren (ParentRunner.java:288) um   org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58) um   org.junit.runners.ParentRunner $ 2.evaluate (ParentRunner.java:268) um   org.junit.runners.ParentRunner.run (ParentRunner.java:363) um   org.junit.runner.JUnitCore.run (JUnitCore.java:137) um   org.junit.runner.JUnitCore.run (JUnitCore.java:115) um   android.support.test.internal.runner.TestExecutor.execute (TestExecutor.java:54)   beim   android.support.test.runner.AndroidJUnitRunner.onStart (AndroidJUnitRunner.java:228)   beim   android.app.Instrumentation $ InstrumentationThread.run (Instrumentation.java:1741)

     

java.lang.NoClassDefFoundError:   org / mockito / internal / creation / cglib / ClassImposterizer $ 3 um   org.mockito.internal.creation.cglib.ClassImposterizer.createProxyClass (ClassImposterizer.java:95)   beim   org.mockito.internal.creation.cglib.ClassImposterizer.imposterise (ClassImposterizer.java:57)   beim   org.mockito.internal.creation.cglib.ClassImposterizer.imposterise (ClassImposterizer.java:49)   beim   org.mockito.internal.creation.cglib.CglibMockMaker.createMock (CglibMockMaker.java:24)   bei org.mockito.internal.util.MockUtil.createMock (MockUtil.java:33) um   org.mockito.internal.MockitoCore.mock (MockitoCore.java:59) um   org.mockito.Mockito.spy (Mockito.java:1368)

     

bei java.lang.reflect.Method.invokeNative (Native Methode) bei   java.lang.reflect.Method.invoke (Methode.java:515) um   org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall (FrameworkMethod.java:50)   beim   org.junit.internal.runners.model.ReflectiveCallable.run (ReflectiveCallable.java:12)   beim   org.junit.runners.model.FrameworkMethod.invokeExplosively (FrameworkMethod.java:47)   beim   org.junit.internal.runners.statements.RunBefores.evaluate (RunBefores.java:24)   beim   org.junit.internal.runners.statements.RunAfters.evaluate (RunAfters.java:27)   an org.junit.runners.ParentRunner.runLeaf (ParentRunner.java:325) um   org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.Java: 78)   beim   org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:57)   bei org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:290) um   org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:71) um   org.junit.runners.ParentRunner.runChildren (ParentRunner.java:288) um   org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58) um   org.junit.runners.ParentRunner $ 2.evaluate (ParentRunner.java:268) um   org.junit.runners.ParentRunner.run (ParentRunner.java:363) um   org.junit.runners.Suite.runChild (Suite.java:128) um   org.junit.runners.Suite.runChild (Suite.java:27) bei   org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:290) um   org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:71) um   org.junit.runners.ParentRunner.runChildren (ParentRunner.java:288) um   org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58) um   org.junit.runners.ParentRunner $ 2.evaluate (ParentRunner.java:268) um   org.junit.runners.ParentRunner.run (ParentRunner.java:363) um   org.junit.runner.JUnitCore.run (JUnitCore.java:137) um   org.junit.runner.JUnitCore.run (JUnitCore.java:115) um   android.support.test.internal.runner.TestExecutor.execute (TestExecutor.java:54)   beim   android.support.test.runner.AndroidJUnitRunner.onStart (AndroidJUnitRunner.java:228)   beim   android.app.Instrumentation $ InstrumentationThread.run (Instrumentation.java:1741)

Ich verwende die folgenden Abhängigkeiten in meiner Gradle-Datei:

%Vor%     
ericharlow 11.08.2015, 17:07
quelle

2 Antworten

12

Standardmäßig verwendet Mockito CGLib oder ByteBuddy, die beide eine generage .class -Dateien haben. Sie laufen auf einem Android-Gerät oder einem Emulator, so dass .class -Dateien nicht helfen; Sie benötigen stattdessen .dex .

Passen Sie Ihre Abhängigkeiten so an, dass Sie DexMaker verwenden, wodurch Mockitos Standard außer Kraft gesetzt wird und Mocking in Android-Umgebungen zugelassen wird.

    
Jeff Bowman 11.08.2015, 18:47
quelle
11

Seit Version 2.6. + hat Mockito ein neues Artefakt hinzugefügt, das ohne weitere Abhängigkeiten für Android funktioniert (d. h. es ist nicht mehr notwendig, DexMaker zu importieren). (Referenz)

Verwenden Sie einfach org.mockito:mockito-android als eine Abhängigkeit für Ihre instrumentierten Komponententests ( androidTest ). Sie würden immer noch die übliche org.mockito:mockito-core für Ihre lokalen Unit-Tests verwenden.

Beispiel:

%Vor%     
Ballenato 09.03.2017 14:01
quelle

Tags und Links