Подтвердить что ты не робот

Почему Intellij IDEA вдруг больше не распознает тесты в тестовой папке?

Я использую JUnit с тех пор, как начал этот проект, и все работает отлично. У меня есть пара сотен тестов, и, конечно, кое-где я начинаю их все. Щелкните правой кнопкой мыши корневую тестовую папку, запустите (или отлаживайте) с помощью JUnit. Но со вчерашнего дня, когда я это делаю, результат:

Process finished with exit code 0

без запуска каких-либо тестов. То же самое происходит с любой папкой в ​​дереве папок. Я все еще могу запустить один тестовый класс, но мне действительно нужен вариант, чтобы запустить их все. Если у вас есть какие-либо идеи, пожалуйста, оставьте их здесь.

Вот что регистрируется, когда я пытаюсь запустить тесты:

2012-10-31 15:16:55,693 [2727217]  ERROR - ij.psi.impl.source.PsiFileImpl - IntelliJ IDEA 11.1.2  Build #IU-117.418 
2012-10-31 15:16:55,693 [2727217]  ERROR - ij.psi.impl.source.PsiFileImpl - JDK: 1.6.0_31 
2012-10-31 15:16:55,693 [2727217]  ERROR - ij.psi.impl.source.PsiFileImpl - VM: Java HotSpot(TM) Client VM 
2012-10-31 15:16:55,693 [2727217]  ERROR - ij.psi.impl.source.PsiFileImpl - Vendor: Sun Microsystems Inc. 
2012-10-31 15:16:55,693 [2727217]  ERROR - ij.psi.impl.source.PsiFileImpl - OS: Windows 7 
2012-10-31 15:16:55,693 [2727217]  ERROR - ij.psi.impl.source.PsiFileImpl - Last Action: RunClass 
2012-10-31 15:16:55,693 [2727217]  ERROR - m.intellij.util.ExecutorsQuery - com.intellij.psi.tree.IFileElementType cannot be cast to com.intellij.psi.tree.IStubFileElementType 
java.lang.ClassCastException: com.intellij.psi.tree.IFileElementType cannot be cast to com.intellij.psi.tree.IStubFileElementType
    at com.intellij.psi.impl.source.PsiFileImpl.calcStubTree(PsiFileImpl.java:976)
    at com.intellij.psi.stubs.StubIndexImpl$1.perform(StubIndexImpl.java:239)
    at com.intellij.psi.stubs.StubIndexImpl$1.perform(StubIndexImpl.java:220)
    at com.intellij.util.indexing.ValueContainer.forEach(ValueContainer.java:60)
    at com.intellij.psi.stubs.StubIndexImpl.process(StubIndexImpl.java:220)
    at com.intellij.psi.stubs.StubIndexImpl.get(StubIndexImpl.java:194)
    at com.intellij.psi.stubs.AbstractStubIndex.get(AbstractStubIndex.java:33)
    at com.intellij.psi.impl.java.stubs.index.JavaAnnotationIndex.get(JavaAnnotationIndex.java:47)
    at com.intellij.psi.impl.search.AnnotatedElementsSearcher.a(AnnotatedElementsSearcher.java:93)
    at com.intellij.psi.impl.search.AnnotatedElementsSearcher.execute(AnnotatedElementsSearcher.java:44)
    at com.intellij.psi.impl.search.AnnotatedElementsSearcher.execute(AnnotatedElementsSearcher.java:28)
    at com.intellij.util.ExecutorsQuery.processResults(ExecutorsQuery.java:42)
    at com.intellij.util.AbstractQuery.forEach(AbstractQuery.java:67)
    at com.intellij.util.InstanceofQuery.forEach(InstanceofQuery.java:54)
    at com.intellij.execution.ConfigurationUtil.addAnnotatedMethodsAnSubclasses(ConfigurationUtil.java:97)
    at com.intellij.execution.ConfigurationUtil.findAllTestClasses(ConfigurationUtil.java:77)
    at com.intellij.execution.junit.TestPackage$MySearchForTestsTask.run(TestPackage.java:397)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl$TaskRunnable.run(ProgressManagerImpl.java:469)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl$2.run(ProgressManagerImpl.java:178)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:218)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcess(ProgressManagerImpl.java:169)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl$8.run(ProgressManagerImpl.java:378)
    at com.intellij.openapi.application.impl.ApplicationImpl$6.run(ApplicationImpl.java:434)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
    at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:145)
4b9b3361

Ответ 1

ОК, я исправил его.

В меню в разделе "Файл" существует опция "Недействительный кеш". Это исправило это!

Ответ 2

В последней версии IDE (начиная с версии Community Edition 2016.1) эта опция упрощена.

щелкните правой кнопкой мыши папку, которую вы хотите распознать в качестве исходной папки:

Mark Directory As → Sources Root

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

Ответ 3

Просто добавьте другой сценарий, который произошел со мной и некоторыми из моих сотрудников:

Alt + введите в класс → создать тест: IJ (2017.1.1) предлагает Arquillian Junit в качестве первого варианта тестирования библиотеки, и, пройдя с ним, тестовый класс и методы создаются без "общедоступного" идентификатора. Затем, если вы решите изменить библиотеку тестирования на JUnit, легко забыть об отсутствии "общедоступного" идентификатора, что заставляет тесты не распознаваться IJ. Разумеется, решение состоит в том, чтобы разместить "общедоступные" идентификаторы.

Хотя это не то, что произошло с вами, оно имеет одинаковые последствия, поэтому этот ответ может помочь другим испытать те же симптомы.

Ответ 4

В моем случае мне пришлось:

  • закрыть проект
  • откройте файл build.gradle
  • перезаписать существующий проект? да
  • щелкните правой кнопкой мыши на проекте
    • Пометить каталог как> Resources Root

Ответ 5

Исправлено несколько раз... открыть файл → структура проекта. Там посмотрите на левое боковое меню, так как в последней записи есть счетчик "проблем" (если больше нуля). нажмите на них и затем для каждой проблемы, выделенной красным цветом в модулях/библиотеках, удалите их (кнопка минус). Им будут даны имена модулей, такие как "test1..23", так как intellij не может разобрать структуру. После удаления всех отмеченных красным, закройте + перезапустите intellij. Не запускайте maven refresh на этом этапе, поскольку он снова выдаст ту же ошибку. При перезапуске intellij снова запустит новое сканирование структуры проекта enter image description here.

Ответ 6

Ни один из предыдущих ответов не работал для меня в IDEA 2019.1.2 (или -.3) с Junit Jupiter 5.5.0. Я git-клонировал несколько проектов, которые я перенес на GitHub с другого компьютера, где их тесты работали нормально. На моем новом ноутбуке я получил "Тесты не найдены", независимо от того, как я пытался их запустить.

Что в итоге сработало: я удалил сгенерированный IDEA файл test.iml, потому что я заметил, что такого файла в нетронутом проекте, который я создал, просто не было, чтобы посмотреть, смогу ли я вообще выполнить тесты (я действительно мог). После того, как я удалил этот файл в обоих старых проектах, тесты прошли отлично. Новый test.iml не был создан.

Я не знаю, как и когда эти файлы были сгенерированы. Поскольку git-репозитории являются частными, я не стал gitignore IDEA *. * Ml файлов; тем не менее, они не были в репозиториях GitHub. Более того, они были в корне проектов, а не в каталоге .idea.

Ответ 7

Если вы используете IntelliJ для выполнения теста и отладки, но не для редактирования. Ваш другой редактор /IDE может бороться с IntelliJ за контроль над сгенерированными файлами (*.class) - в результате IntelliJ сообщает, что тесты не найдены (и, возможно, также могут быть ложные ошибки сборки).

В моем случае код Visual Studio, кажется, оказывает этот эффект (после недавних обновлений обоих инструментов).

Решение, которое я нашел, состоит в том, чтобы закрыть код Visual Studio и затем очистить пересобрать проект с помощью IntelliJ или из командной строки. Другими словами, мой рабочий процесс с двумя IDE больше не работает - поэтому я должен редактировать в IntelliJ.

Ответ 8

В моем случае мы переходим с JUnit 4 на JUnit 5, и я смешал @Test из них.

Короче:

  • если вы используете @RunWith() из JUnit 4, вы должны использовать @org.junit.Test для аннотирования методов тестирования.
  • если вы используете @ExtendWith() из JUnit 5, вы должны использовать вместо этого @org.junit.jupiter.api.Test.

Когда я изменяю импорт, мой класс снова может быть запущен как тестовый.

Ответ 9

Плохой обходной путь для этого - позволить IntelliJ запускать тесты вместо Gradle.

Файл> Настройки> Инструменты сборки> Gradle> Выполнить тесты с помощью> IntelliJ Test Runner

Это аналогичная проблема с другим тестовым фреймворком на Gradle. https://youtrack.jetbrains.com/issue/IDEA-221159