How to use Mockito with dexmaker to test Android?

I am trying to get Mockito (1.9.5 rc1) to work in my tests on Android (using Robotium). To make it work on DVM, I put dexmaker.jar and dexmaker-mockito.jar (v 0.9) in the classpath of the test project.

When running the following test as a JUnit test for Android in 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"); } } 

I get the following 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 

Any suggestions? http://code.google.com/p/dexmaker/ and http://code.google.com/p/mockito/wiki/ReleaseNotes do not contain any useful information.

A similar problem seems to be presented here: http://www.paulbutcher.com/2012/05/mockito-on-android-step-by-step/#comment-65955

UPDATE: with .jar files from https://github.com/paulbutcher/mockito-on-android/tree/master/WarehouseManagerTest/libs everything works smoothly, although it uses an outdated Mockito snapshot based on 1.9.1

+6
source share
1 answer

I ran into the same problem trying to use mockito 1.9.5-rc1.

The dexmaker page notes that you need 1.9.5+ for this , and apparently RC1 does not shorten it. Mockito 1.9.5 seems to have just been released a few days ago , so it should be available soon in Maven Central.

In the meantime, you can download the 1.9.5 zip from the Mockito website . If you use Maven, you can manually install these banks in a local repo using mvn install:install-file . I also got this to work, checking out the latest Mockito source (unreleased 1.9.8), building and installing it on the local Maven repository.

+3
source

Source: https://habr.com/ru/post/926425/


All Articles