Почему JUnit 4 на Android не работает?

Как говорится в документации Android: «Обратите внимание, что API тестирования Android поддерживает стиль кода JUnit 3, но не JUnit 4." ( Основы тестирования ). Должно быть ясно, что JUnit 4 нельзя использовать из коробки с Android.

Но почему это так? Это потому, что тесты выполняются в DVM (в том, что для Android Runtime поддерживается только JUnit 3)? На JVM один сам по себе может выбрать среду исполнения JUnit, которая должна использоваться. Разве это невозможно в DVM?

Обновление 2015/10

Теперь это возможно через AndroidJUnitRunner, который является частью библиотеки поддержки тестирования Android . Короче говоря, вам нужно сделать следующее в проекте на базе Gradle:

  1. Добавьте зависимости:

    dependencies { compile 'com.android.support:support-annotations:22.2.0' androidTestCompile 'com.android.support.test:runner:0.4.1' } 
  2. Укажите testInstrumentationRunner:

     android { defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } } 
  3. Аннотируйте свой тестовый класс с помощью @RunWith(AndroidJUnit4.class) .

  4. Напишите свои тесты в обычном стиле JUnit4.

Также см. Инструкции по настройке Espresso . Обратите внимание, что вам не нужен Espresso для простых тестов JUnit4.

Почему это необходимо

В этой теме есть очень мало информации, которую я могу найти в Интернете. Лучшее, что я нашел, это информация о InstrumentationTestRunner .

Ничто не мешает тестированию JUnit4 на Android-устройстве, как и любой другой Java-код. Тем не менее, платформа тестирования Android выполняет некоторую дополнительную работу:

  1. Он отправляет результаты тестирования обратно на вашу машину разработки через АБР.
  2. Это инструмент (я не уверен, что именно это подразумевает).

Вышеупомянутые действия выполняются некоторыми расширениями, специально предназначенными для JUnit3.

Этот код JUnit3, похоже, является частью InstrumentationTestRunner, который является частью основной системы Android. Однако, как видно из AndroidJUnitRunner, можно использовать собственный тестовый бегун, поддерживающий JUnit4 или другие фреймворки.

Объяснение (на японском) приведено здесь:

http://d.hatena.ne.jp/esmasui/20120910/1347299594

Я понимаю, что проблема связана с внедрением InstrumentationTestRunner .

Автором является проект AndroidJUnit4 .