Estoy tratando de obtener Mockito (1.9.5 rc1) trabajando en mis pruebas de Android (usando Robotium). Para hacer que se ejecute en el DVM pongo dexmaker.jar y dexmaker-mockito.jar (v 0.9) en el classpath del proyecto de prueba.¿Cómo usar Mockito con dexmaker para Android Testing?
Cuando se ejecuta después de la prueba como una prueba unitaria Android en Eclipse:
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");
}
}
consigo el seguimiento de pila:
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
¿Alguna sugerencia? http://code.google.com/p/dexmaker/ y http://code.google.com/p/mockito/wiki/ReleaseNotes no proporcionan ninguna información útil.
Un problema similar parece ser reportados aquí: http://www.paulbutcher.com/2012/05/mockito-on-android-step-by-step/#comment-65955
ACTUALIZACIÓN: con los archivos .jar de https://github.com/paulbutcher/mockito-on-android/tree/master/WarehouseManagerTest/libs todo funciona sin problemas, a pesar de que utiliza una instantánea antigua de Mockito basado en 1.9.1
Tengo el mismo problema, estoy usando Maven para incluir las dependencias, pero tengo exactamente el mismo error que plantea que no puede encontrar la clase com.google.dexmaker.mockito.DexmakerMockMaker. –
Además, he visto que ProGuard lo elimine, pero he intentado mantener explícitamente la clase DexmakerMockMaker. –