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
- Обязательно следуйте инструкциям https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html.
- Убедитесь, что
Test Artifact
in Build Variants
установлен на Android Instrumentation Tests
- Нажмите "
Run
> " Edit Configuration
- Убедитесь, что ваше имя класса/метода находится в
Android Tests
вместо JUnit
- Если он находится в
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" может это сработает