Как использовать Mockito с dexmaker для тестирования Android?
Я пытаюсь заставить Mockito (1.9.5 rc1) работать в моих тестах Android (используя Robotium). Чтобы заставить его работать на DVM, я поместил dexmaker.jar и dexmaker-mockito.jar (v 0.9) в путь к классам тестового проекта.
При запуске следующего теста в качестве теста Android JUnit в 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");
}
}
Я получаю следующую трассировку стека:
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
Какие-либо предложения? http://code.google.com/p/dexmaker/ и http://code.google.com/p/mockito/wiki/ReleaseNotes не предоставляют никакой полезной информации.
Похоже, о подобной проблеме сообщается здесь: http://www.paulbutcher.com/2012/05/mockito-on-android-step-by-step/
ОБНОВЛЕНИЕ: с файлами.jar из https://github.com/paulbutcher/mockito-on-android/tree/master/WarehouseManagerTest/libs все работает гладко, хотя он использует устаревший снимок Mockito, основанный на 1.9.1
1 ответ
Я столкнулся с той же проблемой, пытаясь использовать mockito 1.9.5-rc1.
Страница dexmaker отмечает, что для этого вам нужна версия 1.9.5+, и, очевидно, RC1 ее не обрезает. Mockito 1.9.5, похоже, только что был выпущен несколько дней назад, поэтому вскоре должен появиться в Maven Central.
А пока вы можете скачать zip-версию 1.9.5 с сайта Mockito. Если вы используете Maven, вы можете вручную установить эти файлы в локальный репозиторий с помощью mvn install:install-file
, Я также заставил это работать, проверив последний источник Mockito (не выпущенный 1.9.8), собрав и установив его в локальный репозиторий Maven.