Как использовать PowerMock в проектах Android?

Я создал новый тестовый проект для Android. Я загрузил powermock-mockito-junit-1-1.5.zip с https://code.google.com/p/powermock/downloads/list . Я добавил все библиотеки в папку libs тестового проекта. Класс тестирования – очень простой объект:

 package com.test.test; import org.junit.runner.RunWith; import org.powermock.modules.junit4.PowerMockRunner; import android.util.Log; @RunWith(PowerMockRunner.class) public class TestTestAndroid { public void testRuns() { Log.e("test", "Test case is called"); } } 

Затем я пытаюсь запустить проект из Eclipse или сделать проект из командной строки. Я получаю ту же ошибку:

Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lorg/hamcrest/Description;

Как оказалось, оба junit-4.8.2.jar и mockito-all-1.9.5.jar определяют org.hamcrest.Description . org.hamcrest.Description . Я должен включить банку Mockito по очевидным причинам – мне нужен Mockito. @RunWith версия JUnit предоставляется Android, но это старая версия, которая не включает аннотацию @RunWith .

Может ли кто-то ответить, как использовать powermock и mockito в проекте Android, без противоречивого org.hamcrest.Description problem?

Solutions Collecting From Web of "Как использовать PowerMock в проектах Android?"

Извините, вы не можете использовать PowerMock в VM Dalvik.

PowerMock работает, выполняя свой тест под специальным ClassLoader, который использует Javassist для изменения байт-кода ваших классов. Это нормально работает на обычном JVM, но на Dalvik байт-код и формат класса разные, поэтому такой подход не работает. PowerMock нужно будет переписать для использования Dexmaker вместо Javassist – это было бы явно нетривиально, и я не вижу ничего подобного в списке проблем PowerMock.

Фактически, я считаю, что это совершенно неверно (по крайней мере, с последней версией).

В моей настройке gradle для модуля, где я хочу протестировать свой код, у меня есть

 // Mockito and PowerMock androidTestCompile ('org.powermock:powermock-mockito-release-full:1.6.0') { exclude module: 'hamcrest-core' exclude module: 'objenesis' } 

И все работает нормально. Пока я использую:

 @RunWith(PowerMockRunner.class) @PrepareForTest(ClassToMock.class) 

Для аннотирования моего класса (например, не может запускать его с помощью Robolectric, все еще хорошо в средах CI)