2012-09-27 17 views
6

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

+0

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. –

+0

Además, he visto que ProGuard lo elimine, pero he intentado mantener explícitamente la clase DexmakerMockMaker. –

Respuesta

3

I encontré el mismo problema al intentar usar mockito 1.9.5-rc1.

La página de dexmaker notes that you need 1.9.5+ para esto, y aparentemente RC1 no lo corta. Mockito 1.9.5 appears to have just been released days ago, por lo que debería aparecer pronto en Maven Central.

Mientras tanto, puede download the 1.9.5 zip from Mockito's site. Si está utilizando Maven, puede instalar manualmente esos contenedores en su repositorio local con mvn install:install-file. También conseguí que esto funcionara al revisar la última fuente de Mockito (inédita 1.9.8), construirla e instalarla en mi repositorio local de Maven.