Ich versuche Mockito (1.9.5 rc1) in meinem Android-Test (mit Robotium) arbeiten zu lassen. Um es auf dem DVM laufen zu lassen, habe ich dexmaker.jar und dexmaker-mockito.jar (v 0.9) in den Klassenpfad des Testprojekts gestellt.Wie Mockito mit Dexmaker für Android-Test verwenden?
Wenn folgenden Test als Android-JUnit-Test in Eclipse laufen:
package com.stampay.pos.test;
import roboguice.RoboGuice;
import android.app.Application;
import com.jayway.android.robotium.solo.Solo;
import com.stampay.pos.activities.HomeActivity;
import com.stampay.pos.model.Consumer;
import com.stampay.pos.util.ScannerAndroid;
import static org.mockito.Mockito.*;
public class HomeActivityTest extends ActivityTest<HomeActivity> {
private Solo solo;
Application app;
public HomeActivityTest() {
super(HomeActivity.class);
}
@Override
public void setUp() throws Exception {
solo = new Solo(getInstrumentation(), getActivity());
}
@Override
public void tearDown() throws Exception {
solo.finishOpenedActivities();
RoboGuice.util.reset();
}
public void testScan() throws Exception {
ScannerAndroid scanner = (ScannerAndroid) getActivity().getScannerHelper();
Consumer mockConsumer = mock(Consumer.class);
//scanner.generateResult("consumer1");
}
}
bekomme ich folgende Stack-Trace:
java.lang.ExceptionInInitializerError
at com.stampay.pos.test.HomeActivityTest.testScan(HomeActivityTest.java:41)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:192)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)
Caused by: java.lang.ExceptionInInitializerError
at org.mockito.internal.MockitoCore.<init>(MockitoCore.java:40)
at org.mockito.Mockito.<clinit>(Mockito.java:932)
... 15 more
Caused by: java.lang.ExceptionInInitializerError
at org.mockito.internal.util.MockUtil.<clinit>(MockUtil.java:21)
... 17 more
Caused by: org.mockito.exceptions.misusing.MockitoConfigurationException: Failed to load interface org.mockito.plugins.MockMaker using jar:file:/data/app/com.stampay.pos.test-2.apk!/mockito-extensions/org.mockito.plugins.MockMaker
... 15 more
Caused by: java.lang.ClassNotFoundException: com.google.dexmaker.mockito.DexmakerMockMaker
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
at org.mockito.internal.configuration.ClassPathLoader.loadImplementations(ClassPathLoader.java:133)
at org.mockito.internal.configuration.ClassPathLoader.findPlatformMockMaker(ClassPathLoader.java:102)
at org.mockito.internal.configuration.ClassPathLoader.<clinit>(ClassPathLoader.java:61)
at org.mockito.internal.util.MockUtil.<clinit>(MockUtil.java:21)
at org.mockito.internal.MockitoCore.<init>(MockitoCore.java:40)
at org.mockito.Mockito.<clinit>(Mockito.java:932)
... 15 more
Irgendwelche Vorschläge? http://code.google.com/p/dexmaker/ und http://code.google.com/p/mockito/wiki/ReleaseNotes liefern keine hilfreichen Informationen.
Ein ähnliches Problem scheint hier berichtet werden: http://www.paulbutcher.com/2012/05/mockito-on-android-step-by-step/#comment-65955
UPDATE: mit den .jar-Dateien von https://github.com/paulbutcher/mockito-on-android/tree/master/WarehouseManagerTest/libs alles funktioniert reibungslos, obwohl er eine veraltete Momentaufnahme Mockito verwendet basierend auf 1.9.1
Ich habe das gleiche Problem passiert, ich benutze Maven die Abhängigkeiten, aber ich habe genau den gleichen Fehler ausgelöst, dass es die com.google.dexmaker.mockito.DexmakerMockMaker Klasse nicht finden kann. –
Ich habe auch untersucht, ob es von ProGuard entfernt wurde, aber ich habe versucht, die Klasse DexmakerMockMaker explizit beizubehalten. –