Wie bekomme ich Mockito arbeiten in androidTest
In meinem test, wie kann ich simulieren Sie eine Klasse, die ich schrieb?
Hier ist mein test-code:
import android.support.test.runner.AndroidJUnit4;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@RunWith(AndroidJUnit4.class)
public class SampleTest {
@Mock
Sample mySample;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void shouldMockSample() {
verify(mySample, never()).neverCallMe();
}
}
Beispiel ist nur eine dummy-Klasse.
public class Sample {
public void neverCallMe() {}
}
Wie bekomme ich diesen Fehler loszuwerden?
java.lang.VerifyError: org/mockito/cglib/core/ReflectUtils an
org.mockito.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:167)
bei
org.mockito.cglib.core.DefaultGeneratorStrategy.generieren(DefaultGeneratorStrategy.java:25)
bei
org.mockito.cglib.core.AbstractClassGenerator.erstellen(AbstractClassGenerator.java:217)
bei
org.mockito.cglib.core.KeyFactory$Generator.erstellen(KeyFactory.java:145)
bei org.mockito.cglib.core.KeyFactory.erstellen(KeyFactory.java:117) at
org.mockito.cglib.core.KeyFactory.erstellen(KeyFactory.java:109) at
org.mockito.cglib.core.KeyFactory.erstellen(KeyFactory.java:105) at
org.mockito.cglib.proxy.Enhancer.(Enhancer.java:70) at
org.mockito.intern.- Erstellung.cglib.ClassImposterizer.createProxyClass(ClassImposterizer.java:95)
bei
org.mockito.intern.- Erstellung.cglib.ClassImposterizer.imposterise(ClassImposterizer.java:57)
bei
org.mockito.intern.- Erstellung.cglib.ClassImposterizer.imposterise(ClassImposterizer.java:49)
bei
org.mockito.intern.- Erstellung.cglib.CglibMockMaker.createMock(CglibMockMaker.java:24)
bei org.mockito.intern.util.MockUtil.createMock(MockUtil.java:33) at
org.mockito.intern.MockitoCore.mock(MockitoCore.java:59) at
org.mockito.Mockito.spy(Mockito.java:1368)in java.lang.reflektieren.Methode.invokeNative(Native Method) at
java.lang.reflektieren.Methode.invoke(Method.java:515) an
org.junit.die Läufer.Modell.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
bei
org.junit.intern.die Läufer.Modell.ReflectiveCallable.run(ReflectiveCallable.java:12)
bei
org.junit.die Läufer.Modell.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
bei
org.junit.intern.die Läufer.Aussagen.RunBefores.bewerten(RunBefores.java:24)
bei
org.junit.intern.die Läufer.Aussagen.RunAfters.bewerten(RunAfters.java:27)
bei org.junit.die Läufer.ParentRunner.runLeaf(ParentRunner.java:325) at
org.junit.die Läufer.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
bei
org.junit.die Läufer.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
bei org.junit.die Läufer.ParentRunner$3.run(ParentRunner.java:290) an
org.junit.die Läufer.ParentRunner$1.Zeitplan(ParentRunner.java:71) at
org.junit.die Läufer.ParentRunner.runChildren(ParentRunner.java:288) bei
org.junit.die Läufer.ParentRunner.access$000(ParentRunner.java:58) at
org.junit.die Läufer.ParentRunner$2.bewerten(ParentRunner.java:268) bei
org.junit.die Läufer.ParentRunner.run(ParentRunner.java:363) an
org.junit.die Läufer.Suite.runChild(Suite.java:128) bei
org.junit.die Läufer.Suite.runChild(Suite.java:27) at
org.junit.die Läufer.ParentRunner$3.run(ParentRunner.java:290) an
org.junit.die Läufer.ParentRunner$1.Zeitplan(ParentRunner.java:71) at
org.junit.die Läufer.ParentRunner.runChildren(ParentRunner.java:288) bei
org.junit.die Läufer.ParentRunner.access$000(ParentRunner.java:58) at
org.junit.die Läufer.ParentRunner$2.bewerten(ParentRunner.java:268) bei
org.junit.die Läufer.ParentRunner.run(ParentRunner.java:363) an
org.junit.runner.JUnitCore.run(JUnitCore.java:137) at
org.junit.runner.JUnitCore.run(JUnitCore.java:115) at
android.Unterstützung.test.intern.runner.TestExecutor.execute(TestExecutor.java:54)
bei
android.Unterstützung.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:228)
bei
android.app.Instrumentation$InstrumentationThread.laufen(Instrumentation.java:1741)java.lang.NoClassDefFoundError:
org/mockito/intern/anlegen/cglib/ClassImposterizer$3 an
org.mockito.intern.- Erstellung.cglib.ClassImposterizer.createProxyClass(ClassImposterizer.java:95)
bei
org.mockito.intern.- Erstellung.cglib.ClassImposterizer.imposterise(ClassImposterizer.java:57)
bei
org.mockito.intern.- Erstellung.cglib.ClassImposterizer.imposterise(ClassImposterizer.java:49)
bei
org.mockito.intern.- Erstellung.cglib.CglibMockMaker.createMock(CglibMockMaker.java:24)
bei org.mockito.intern.util.MockUtil.createMock(MockUtil.java:33) at
org.mockito.intern.MockitoCore.mock(MockitoCore.java:59) at
org.mockito.Mockito.spy(Mockito.java:1368)in java.lang.reflektieren.Methode.invokeNative(Native Method) at
java.lang.reflektieren.Methode.invoke(Method.java:515) an
org.junit.die Läufer.Modell.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
bei
org.junit.intern.die Läufer.Modell.ReflectiveCallable.run(ReflectiveCallable.java:12)
bei
org.junit.die Läufer.Modell.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
bei
org.junit.intern.die Läufer.Aussagen.RunBefores.bewerten(RunBefores.java:24)
bei
org.junit.intern.die Läufer.Aussagen.RunAfters.bewerten(RunAfters.java:27)
bei org.junit.die Läufer.ParentRunner.runLeaf(ParentRunner.java:325) at
org.junit.die Läufer.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
bei
org.junit.die Läufer.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
bei org.junit.die Läufer.ParentRunner$3.run(ParentRunner.java:290) an
org.junit.die Läufer.ParentRunner$1.Zeitplan(ParentRunner.java:71) at
org.junit.die Läufer.ParentRunner.runChildren(ParentRunner.java:288) bei
org.junit.die Läufer.ParentRunner.access$000(ParentRunner.java:58) at
org.junit.die Läufer.ParentRunner$2.bewerten(ParentRunner.java:268) bei
org.junit.die Läufer.ParentRunner.run(ParentRunner.java:363) an
org.junit.die Läufer.Suite.runChild(Suite.java:128) bei
org.junit.die Läufer.Suite.runChild(Suite.java:27) at
org.junit.die Läufer.ParentRunner$3.run(ParentRunner.java:290) an
org.junit.die Läufer.ParentRunner$1.Zeitplan(ParentRunner.java:71) at
org.junit.die Läufer.ParentRunner.runChildren(ParentRunner.java:288) bei
org.junit.die Läufer.ParentRunner.access$000(ParentRunner.java:58) at
org.junit.die Läufer.ParentRunner$2.bewerten(ParentRunner.java:268) bei
org.junit.die Läufer.ParentRunner.run(ParentRunner.java:363) an
org.junit.runner.JUnitCore.run(JUnitCore.java:137) at
org.junit.runner.JUnitCore.run(JUnitCore.java:115) at
android.Unterstützung.test.intern.runner.TestExecutor.execute(TestExecutor.java:54)
bei
android.Unterstützung.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:228)
bei
android.app.Instrumentation$InstrumentationThread.laufen(Instrumentation.java:1741)
Ich bin mit den folgenden Abhängigkeiten in meinem gradle-Datei:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.1'
androidTestCompile 'com.android.support:support-annotations:22.2.1'
androidTestCompile 'org.mockito:mockito-core:1.10.19'
androidTestCompile 'org.objenesis:objenesis:2.1'
androidTestCompile 'org.hamcrest:hamcrest-library:1.3'
androidTestCompile 'com.android.support.test:runner:0.3'
androidTestCompile 'com.android.support.test:rules:0.3'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2'
testCompile 'org.mockito:mockito-core:1.10.19'
testCompile 'org.hamcrest:hamcrest-library:1.3'
testCompile 'junit:junit:4.12'
testCompile 'org.robolectric:robolectric:3.0'
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Standardmäßig, Mockito verwendet CGLib oder ByteBuddy, die beide erzeugen
.class
- Dateien. Man läuft auf einem Android-Gerät oder emulator, so.class
Dateien wird nicht helfen; Sie müssen.dex
- format statt.Passen Sie Ihre Abhängigkeiten zu verwenden DexMaker, die außer Kraft Mockito ist Standard und ermöglicht Spott in Android-Umgebungen.
MockitoAnnotations.initMocks(this)
. Es tut immer noch so Aussehen, oder hast du Sie umgestalten zu verwenden MockitoRule oder MockitoJUnitRunner statt? (Vielleicht möchten Sie Fragen, wie eine separate Frage.)Seit der version 2.6.+, Mockito wurde ein neues Artefakt, das funktioniert für Android, ohne die Notwendigkeit von jeder anderen Abhängigkeit (d.h. keine Notwendigkeit zu importieren DexMaker mehr). (Referenz)
Verwenden Sie einfach
org.mockito:mockito-android
als Abhängigkeit für Ihre instrumentierten unit-tests (androidTest
). Sie würde immer noch die üblichenorg.mockito:mockito-core
für Ihre lokalen unit-tests.Beispiel:
androidTestImplementation
stattandroidTestCompile
da ist es jetzt veraltet.