Тесты на оборудование для Android с помощью Mockito

Я пытаюсь использовать Mockito framework с помощью тестов на андроид, но я не могу его правильно инициализировать. У меня есть следующий тестовый класс:

class MainKontorTest extends ActivityInstrumentationTestCase2<MainActivity> { @Mock Dependency bar; @Override public void setUp() { super.setUp(); MockitoAnnotations.initMocks(this); } public void testSomething() { Foo foo = new Foo(bar); } } 

Когда я пытаюсь запустить этот тест, я получаю следующую ошибку и stacktrace:

Java.lang.ExceptionInInitializerError at org.mockito.internal.creation.cglib.ClassImposterizer.createProxyClass (ClassImposterizer.java:95) в org.mockito.internal.creation.cglib.ClassImposterizer.imposterise (ClassImposterizer.java:57) в org. Mockito.internal.creation.cglib.ClassImposterizer.imposterise (ClassImposterizer.java:49) в org.mockito.internal.creation.cglib.CglibMockMaker.createMock (CglibMockMaker.java:24) в org.mockito.internal.util.MockUtil. CreateMock (MockUtil.java:33) в org.mockito.internal.MockitoCore.mock (MockitoCore.java:59) в org.mockito.Mockito.mock (Mockito.java:1285) в org.mockito.internal.configuration.MockAnnotationProcessor .process (MockAnnotationProcessor.java:33) в org.mockito.internal.configuration.MockAnnotationProcessor.process (MockAnnotationProcessor.java:16) в org.mockito.internal.configuration.DefaultAnnotationEngine.createMockFor (DefaultAnnotationEngine.java:43) в org. mockito.internal.configuration.DefaultAnnotationEngine.process (DefaultAnnotationEn Gine.java:66) at org.mockito.internal.configuration.InjectingAnnotationEngine.processIndependentAnnotations (InjectingAnnotationEngine.java:71) в org.mockito.internal.configuration.InjectingAnnotationEngine.process (InjectingAnnotationEngine.java:55) в org.mockito.MockitoAnnotations .initMocks (MockitoAnnotations.java:108) в org.arkadiy.moduledelegationsample.ui.main.MainKontorTest.setUp (MainKontorTest.java:20) в junit.framework.TestCase.runBare (TestCase.java:132) в junit.framework. TestResult $ 1.protect (TestResult.java:115) в android.support.test.internal.runner.junit3.AndroidTestResult.runProtected (AndroidTestResult.java:77) в junit.framework.TestResult.run (TestResult.java:118) в Android.support.test.internal.runner.junit3.AndroidTestResult.run (AndroidTestResult.java:55) в junit.framework.TestCase.run (TestCase.java:124) на android.support.test.internal.runner.junit3. NonLeakyTestSuite $ NonLeakyTest.run (NonLeakyTestSuite.java:63) в junit.framework.TestSuite.runTest (TestSuite.java:24 3) в junit.framework.TestSuite.run (TestSuite.java:238) в android.support.test.internal.runner.junit3.DelegatingTestSuite.run (DelegatingTestSuite.java:103) в android.support.test.internal.runner .junit3.AndroidTestSuite.run (AndroidTestSuite.java:69). : 128) at org.junit.runners.Suite.runChild (Suite.java:27) на org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:290) на org.junit.runners.ParentRunner $ 1.schedule ( ParentRunner.java:71) на org.junit.runners.ParentRunner.runChildren (ParentRunner.java:288) на org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58) на org.junit.runners.ParentRunner $ 2 .evaluate (ParentRunner.java:268) на org.junit.runners.ParentRunner.run (ParentRunner.java:363) на org.junit.runner.JUnitCore.run (JUnitCore.java:137) на org.junit.runner. JUnitCore.run (JUnitCore.java:115) в android.support.test.internal.runner.TestE Xecutor.execute (TestExecutor.java:54) на android.support.test.runner.AndroidJUnitRunner.onStart (AndroidJUnitRunner.java:240) на android.app.Instrumentation $ InstrumentationThread.run (Instrumentation.java:1869) Вызвано: org .mockito.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException -> null на org.mockito.cglib.core.AbstractClassGenerator.create (AbstractClassGenerator.java:238) на org.mockito.cglib.core.KeyFactory $ Generator.create (KeyFactory.java:145) в org.mockito.cglib.core.KeyFactory.create (KeyFactory.java:117) в org.mockito.cglib.core.KeyFactory.create (KeyFactory.java:109) в org .mockito.cglib.core.KeyFactory.create (KeyFactory.java:105) в org.mockito.cglib.proxy.Enhancer. (Enhancer.java:70) … 40 more Причиняется: java.lang.reflect.InvocationTargetException В java.lang.reflect.Method.invoke (собственный метод) в java.lang.reflect.Method.invoke (Method.java:372) в org.mockito.cglib.core.ReflectUtils.defineClass (ReflectUtils.java:385) На org.mockito.cglib.cor E.AbstractClassGenerator.create (AbstractClassGenerator.java:220) … 45 more Причиняется: java.lang.UnsupportedOperationException: невозможно загрузить этот тип файла класса в java.lang.ClassLoader.defineClass (ClassLoader.java:300) … еще 49

Как я могу использовать Mockito с инструментальными испытаниями? Я пробовал использовать Mockito с новым Rule api, но ошибка была такой же.

Solutions Collecting From Web of "Тесты на оборудование для Android с помощью Mockito"

Издевательствами, которые создает Mockito, являются сгенерированные файлы классов; Однако Mockito предназначен для использования в JVM, поэтому из коробки он генерирует .class с помощью cglib . Тесты на инструментальные средства Android выполняются на устройствах или эмуляторах, поэтому им нужны файлы Dalvik .dex .

Вам нужно будет убедиться, что вы включили DexMaker в свой путь к классам. Проект dexmaker-mockito Maven кажется правильным, хотя это зависит от Mockito 1.10.5, который на данный момент является несколькими версиями.

В качестве примечания, если вы не используете библиотеку поддержки тестирования Android , вам нужно будет использовать семантику JUnit3. Вы не сможете использовать поля @Rule или пользовательские тестовые @Rule ; Вам также необходимо переопределить setUp и tearDown (в отличие от @Before и @After аннотаций) и назвать ваши тесты как testFooBar (в отличие от аннотаций @Test ).