IntelliJ IDEA с Junit 4.7 "!!! JUnit версии 3.8 или более поздней версии:"

Когда я пытаюсь запустить следующий тест в IntelliJ IDEA, я получаю сообщение:

"!!! Ожидается версия JUnit версии 3.8 или новее:"

Следует отметить, что это проект Android, над которым я работаю в IntelliJ IDEA 9.

public class GameScoreUtilTest {
    @Test
    public void testCalculateResults() throws Exception {
        final Game game = new Game();

        final Player player1 = new Player();
        {
            final PlayedHole playedHole = new PlayedHole();
            playedHole.setScore(1);
            game.getHoleScoreMap().put(player1, playedHole);
        }
        {
            final PlayedHole playedHole = new PlayedHole();
            playedHole.setScore(3);
            game.getHoleScoreMap().put(player1, playedHole);
        }
        final GameResults gameResults = GameScoreUtil.calculateResults(game);

        assertEquals(4, gameResults.getScore());
    }
}

Полная трассировка стека выглядит так:

!!! JUnit version 3.8 or later expected:

java.lang.RuntimeException: Stub!
    at junit.runner.BaseTestRunner.<init>(BaseTestRunner.java:5)
    at junit.textui.TestRunner.<init>(TestRunner.java:54)
    at junit.textui.TestRunner.<init>(TestRunner.java:48)
    at junit.textui.TestRunner.<init>(TestRunner.java:41)
    at com.intellij.rt.execution.junit.JUnitStarter.junitVersionChecks(JUnitStarter.java:152)
    at com.intellij.rt.execution.junit.JUnitStarter.canWorkWithJUnitVersion(JUnitStarter.java:136)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:49)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)

Process finished with exit code -3

Ответ 1

Эта проблема возникает из-за того, что Android Platform (android.jar) уже содержит классы JUnit. Тестер IDEA загружает эти классы и видит, что они из старого JUnit, в то время как вы пытаетесь использовать аннотированные тесты, которые являются особенностью нового JUnit, поэтому вы получаете ошибку от тестового бегуна.

Решение прост, откройте Project Structure | Modules | Dependencies, и переместите junit-4.7.jar вверх, так что он достигнет до Android 1.6 Platform в пути к классам. Теперь тестовый бегун будет счастлив, так как он загружает новую версию JUnit.

Ответ 2

enter image description here

мой модуль является модулем Java-библиотеки, поэтому изменение JRE до 1,8 Java решает проблему.

Или вы также можете сделать это глобально через "Настройки модуля"> "Расположение SDK"> JDK, указав Oracle JDK 8 вместо копии Android SDK.

Ответ 3

У меня была эта проблема с проектом с несколькими модулями (libgdx). Один модуль является чистой Java и имеет тесты. Мое решение состояло в том, чтобы установить "использовать альтернативную JRE" для "Java 1.8" в конфигурации запуска моих модульных тестов. Это гарантирует, что файл android.jar не находится на пути к классам, а используется бегун junit 4.x.

Ответ 4

Я получил ту же ошибку при создании Unit Test и Android Instrument Test в Android Studio 1. 4+, и он начал запутываться. Чтобы избежать этой ошибки, убедитесь, что ваш тестовый класс попадает под Android Tests при Run/Debug Configurations

  1. Обязательно следуйте инструкциям https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html.
  2. Убедитесь, что Test Artifact in Build Variants установлен на Android Instrumentation Tests
  3. Нажмите " Run > " Edit Configuration
  4. Убедитесь, что ваше имя класса/метода находится в Android Tests вместо JUnit
  5. Если он находится в JUnit просто удалите конфигурацию и щелкните правой кнопкой мыши файл, который вы хотите проверить, и Run снова. Затем он создаст конфигурацию в разделе " Android Tests " и запускается на устройстве/эмуляторе.

Ответ 5

Для Android Studio - начиная с Android Studio 1.1 Beta 4, Google добавила поддержку Android Gradle плагин 1.1.0-RC. Новый плагин поддерживает модульное тестирование через Android Studio с помощью junit 4 +.

Это все еще экспериментально, и для его установки есть несколько шагов руководства.

Ответ 6

Для всех, кто читает этот пост и все еще имеет ту же проблему с AndroidStudio 1.0. Вы не можете изменить порядок зависимостей в AndroidStudio, если IDE переписывает их автоматически. И даже если вам удастся изменить порядок, изменив файл .iml, вы получите "класс не найден...". Это связано с тем, что тестовый выходный путь нельзя установить на AndroidStudio.

На самом деле, есть решение сделать AndroidStudio, Junit и Robolectric работать вместе. Взгляните на этот https://github.com/JCAndKSolutions/android-unit-test и используйте этот плагин: https://github.com/evant/android-studio-unit-test-plugin

Отлично работает для меня.

Ответ 7

Есть две вещи, которые я мог себе представить:

  • Если ваша IDE пытается запустить Android Тест Junit, который работает непосредственно на эмулятор вы не можете использовать Junit4.
  • Если вы случайно использовали классы junit, предоставленные из андроида, они не могут работать на нормальном jvm, потому что есть только реальные скомпилированные классы для android dalvik vm.

Ответ 8

Это произошло и со мной в Android Studio 1.1, хотя оно должно поддерживать модульные тесты без плагина.

На других машинах (тот же проект, в той же версии AS) я обнаружил, что при выполнении модульных тестов среда IDE не добавляет файл android.jar в путь к классам, а на моей машине это делает.

Мое лучшее предположение заключалось в том, что из-за преобразования, которое мы сделали с Maven до Gradle и перехода от intellij к AS, некоторый кеш настроек оставался где-то на моей машине, что вызвало добавление android.jar в путь к классам.

Что я сделал, это очистить все связанные с Android кеши с моей машины (в папке c:\users\USRE_NAME): .android .AndroidStudio .gradle .m2

После этого я снова открыл проект, и тесты работали.

По-прежнему пытаюсь понять, что пошло не так, но теперь это должно сделать трюк.

Ответ 9

У меня была эта проблема в Android Studio 1.5, потому что я не знал, что мне пришлось переключить параметр "Test Artifact" в "Варианты сборки" (нижний левый угол главного окна) с "Тесты инструментов Android" на "Единичные тесты". Когда вы это сделаете, вы можете увидеть файл ExampleUnitTest.java в окне проекта.

Ответ 10

У меня была такая же проблема, но по другой причине. Я был на IntelliJ с регулярным java gradle проектом (не андроидом), но JDK был установлен в Android SDK в Project Structure (по некоторым причинам был JDK по умолчанию). Это действительно глупо, но IntelliJ не был достаточно хорош, чтобы указать мне, что случилось, поэтому я застрял на этом.

Ответ 11

У меня такая же ошибка, когда я создал свой собственный пакет junit

введите описание изображения здесь

Чтобы исправить это, я добавил эти две строки в файл приложения gradle, как он объяснил здесь:

dependencies {
    ...
    // Required -- JUnit 4 framework
    testCompile 'junit:junit:4.12'
    // Optional -- Mockito framework
    testCompile 'org.mockito:mockito-core:1.10.19'
}

Ответ 12

Вот как я это решил:

Изменить конфигурации → По умолчанию → Android JUnit → Добавить в рабочий каталог следующее:

$MODULE_DIR $

Ответ 13

Для меня эта проблема была вызвана устаревшей/неработающей конфигурацией тестов. Мне просто пришлось удалить конфигурацию, затем создать новую, и проблема была устранена.

Delete the old test configuration

Ответ 14

В проекте Android у меня было minifyEnabled = true, после того как я изменил его на false, все сработало.

Ответ 15

Если вы удалите

testOptions {
    unitTests.returnDefaultValues = true
}

из вашего build.gradle он будет работать

Ответ 16

Перейдите к структуре проекта → Настройка платформы, измените SDK на 1.8, решив мою проблему.

Ответ 17

Я также столкнулся с одной и той же проблемой, после того, как я перешел в build.gradle, и это отлично работает для меня.

измените версию junit внутри build.gradle на:

    testImplementation 'junit:junit:3.8'

Ответ 18

Я следовал за ответом CrazyCoder, но в зависимостях не отображался файл junit. поэтому я скачал один из http://www.java2s.com/Code/Jar/j/Downloadjunitjar.htm, а затем добавил его, нажав кнопку "плюс" справа. И это сработало

Ответ 19

Отключение "Использовать встроенный JDK" в Project Structure/SDK Location - это то, что помогло в моем случае, но я не знаю точно, в чем причина его неудачи с самого начала.

Ответ 20

Замените свой android.jar в папке libs последней. Вы можете скачать его здесь

Ответ 21

В AndroidStudio, Open Project Structure -> SDK Location, вы можете видеть местоположение JDK, измените использование "Использовать встроенный JDK", чтобы применить JDK, а затем вернитесь к "Использовать встроенный JDK" может это сработает