Почему JUnit 4 на Android не работает? - PullRequest
33 голосов
/ 21 марта 2012

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

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

Ответы [ 2 ]

40 голосов
/ 11 августа 2012

Обновление 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. Укажите тестInstrumentationRunner:

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

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

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

Зачем это нужно

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

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

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

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

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

2 голосов
/ 28 ноября 2012

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

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

Я понимаю, что проблема возникает из-за реализации InstrumentationTestRunner.

Авторское решение - проект AndroidJUnit4 .

...