IntelliJ IDEA с Junit 4.7 "!!! Ожидается версия JUnit 3.8 или более поздняя:" - PullRequest
198 голосов
/ 11 марта 2010

Когда я пытаюсь запустить следующий тест в 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

Ответы [ 19 ]

360 голосов
/ 12 марта 2010

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

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

31 голосов
/ 13 июня 2017

enter image description here

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

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

8 голосов
/ 28 апреля 2015

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

6 голосов
/ 10 февраля 2016

Я получил ту же ошибку при создании 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 в Build Variants установлено на Android Instrumentation Tests
  3. Нажмите меню Run> Edit Configuration
  4. Убедитесь, что ваше имя класса / метода находится внутри Android Tests вместо JUnit
  5. Если он находится в JUnit, просто удалите конфигурацию и щелкните правой кнопкой мыши файл, который вы хотите протестировать, и Run еще раз. Затем он создаст конфигурацию в разделе Android Tests и запустится на устройстве / эмуляторе.
5 голосов
/ 08 февраля 2015

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

Это все еще эксперимент, и есть несколько ручных шагов , чтобы установить это.

4 голосов
/ 15 декабря 2014

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

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

1 голос
/ 19 января 2016

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

1 голос
/ 01 апреля 2015

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

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

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

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

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

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

1 голос
/ 11 апреля 2017

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

1 голос
/ 11 марта 2010

Есть две вещи, которые я мог бы представить, чтобы это произошло

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