IntelliJ идея с 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

16 ответов


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

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


enter image description here

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

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


У меня была эта проблема с проектом multi module (libgdx). Один модуль-чистая Java и имеет тесты. Мое решение состояло в том, чтобы установить "использовать альтернативную JRE" на "Java 1.8" в конфигурации запуска моих модульных тестов. Это гарантирует отсутствие android.фляги в classpath и в JUnit 4.используется X runner.


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

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

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

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


для всех, кто читает этот пост и по-прежнему имеют ту же проблему с 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

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


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

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

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

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

мое лучшее предположение состояло в том, что из-за преобразования мы сделали из Maven в Gradle и переход от intellij к как некоторый кэш настроек остался где-то в моей машине, что причиной для Андроид.банки будут добавлены в classpath.

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

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

все еще пытаюсь понять, что пошло не так, но это должно сделать трюк на данный момент.


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


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


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

enter image description here

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

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

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

изменить конфигурации - > по умолчанию - > Android JUnit - > добавить следующее В рабочий каталог:

$MODULE_DIR$


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


Если убрать

testOptions {
    unitTests.returnDefaultValues = true
}

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


перейти к структуре проекта - > настройка платформы, изменить SDKs на 1.8 решить мою проблему.


Я также столкнулся с той же проблемой после перехода в build.Gradle в это работает хорошо для меня.

измените версию junit внутри сборки.gradle to:

    testImplementation 'junit:junit:3.8'