2012-09-27 10 views
6

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

+0

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

+0

Ich habe auch untersucht, ob es von ProGuard entfernt wurde, aber ich habe versucht, die Klasse DexmakerMockMaker explizit beizubehalten. –

Antwort

3

I stieß auf das gleiche Problem beim Versuch, Mockito 1.9.5-rc1 zu verwenden.

Die Dexmaker-Seite notes that you need 1.9.5+ für diese, und anscheinend RC1 schneidet es nicht. Mockito 1.9.5 appears to have just been released days ago, so sollte es kurz in Maven Central erscheinen.

In der Zwischenzeit können Sie download the 1.9.5 zip from Mockito's site. Wenn Sie Maven verwenden, können Sie diese Jars manuell in Ihrem lokalen Repo mit mvn install:install-file installieren. Ich habe das auch zum Laufen gebracht, indem ich mir die neueste Mockito-Quelle (unveröffentlicht 1.9.8) angeschaut habe, die ich zu meinem lokalen Maven-Repo gebaut und installiert habe.