Клас не знайдено: Порожній тестовий набір в IntelliJ


183

Я тільки починаю програму з інформатики у своєму коледжі, і у мене виникають проблеми з IntelliJ. Коли я намагаюся запустити одиничні тести, я отримую повідомлення

Process finished with exit code 1
Class not found: "edu.macalester.comp124.hw0.AreaTest"Empty test suite.

Я також бачу повідомлення з назвою "Тестів не знайдено" в лівій частині екрана. Мій тестовий код тут:

package edu.macalester.comp124.hw0;


import org.junit.Test;
import static org.junit.Assert.*;

public class AreaTest {

    @Test
    public void testSquare() {
    assertEquals(Area.getSquareArea(3.0), 9.0, 0.001);
    }

    @Test
    public void testCircle() {
    assertEquals(Area.getCircleArea(3.0), 28.2743, 0.001);
    }
}

І мій код проекту тут:

package edu.macalester.comp124.hw0;

import java.lang.Math;
public class Area {

/**
 * Calculates the area of a square.
 * @param sideLength The length of the side of a square
 * @return The area
 */
public static double getSquareArea(double sideLength) {
    // Has been replaced by correct formula
    return sideLength * sideLength;
}

/**
 * Calculates the area of a circle.
 * @param radius The radius of the circle
 * @return The area
 */
public static double getCircleArea(double radius) {
    // Replaced by correct value
    return radius * 2 * Math.PI;
}

}

Як змусити мої тести працювати? Я використовую останню версію IntelliJ IDEA CE.


7
Тож багато речей можуть піти не так. Для мене це було так само просто, як введення mvn clean packageтерміналу. Не впевнені, чому IntelliJ імпортував проект неправильно на початку.
MarkHu

1
Для мене просто зробіть папку як "тестовий корінець ресурсу" ...
Xin Meng


Побудувати -> Очистити і побудувати -> Перебудувати мені було достатньо.
gustavoknz

Відповіді:


109

Було те саме повідомлення. Мені довелося видалити конфігурацію Run / Debug.

У моєму випадку я раніше проводив одиничний тест як локальний тест. Після цього я перемістив свій тест на пакет androidTest і спробував запустити його ще раз. Android Studio запам’ятав останню конфігурацію запуску, тому спробував запустити її знову як тест локальної одиниці, що призвів до тієї ж помилки.

Після видалення конфігурації та повторного запуску тесту він створив нову конфігурацію і працював.

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


Я думаю, що в більшості випадків ваше рішення було б найбільш універсальним і найменш магічним. Працював над моїм проектом як шарм.
ba3a

Я спробував це, але це не вийшло самостійно. Мені довелося також визнати недійсними каси. File > Cashes / Restart
Лукаш

Я спробував це, а також визнав недійсними каси. Але все одно не працює.
крила

Це спрацювало для мене після того, як я згадав натиснути кнопку "очевидна нормальність", а не просто закривати діалогове вікно :-)
rimsky

У моїй студії Android я не бачу жодної статті "Спеціальний інструментальний бігун".
Девід

59

Я пішов у

File -> Invalidate Caches/Restart...

а потім це працювало на мене.


6
Я це зробив, а потім довелося видалити тестові конфігурації.
Йохан Хенкенс

У моєму випадку це не допомогло.
користувач3791111

Файл> Недійсні кеші / Перезавантаження> Просто перезапуск працював на мене
Hashmatullah Noorzai

49

У мене було те саме питання. Я відновив проект, і це мені допомогло.

Перейдіть на Build -> Rebuild Project

Після цього, якщо ви використовуєте інструмент Maven, рекомендую скористатися опцією Reimport All Maven Projects


Якщо це не допомогло, спробуйте інші можливі рішення:

  • Перейдіть у меню Файл -> Недійсний кеш / Перезапуск -> Недійсний та Перезапуск

або:

  • У вашій структурі проекту Maven src / main / java клацніть правою кнопкою миші на директорії java та виберіть опцію Позначити каталог як -> Sources Root

    Аналогічно зробіть те ж саме з тестовою директорією, тому: src / test / java клацніть правою кнопкою миші на директорії java та виберіть варіант Позначити каталог as -> Корінь джерела тестування

або:

  • Перейдіть до пункту Виконати -> Редагувати конфігурації та в розділі JUnit видаліть тестові конфігурації. Застосувати зміни. Після цього спробуйте запустити свої тести. Нова конфігурація повинна бути створена автоматично.

або:

  • Перейдіть у меню Файл -> Структура проекту , виберіть Модулі , потім виберіть власний модуль та перейдіть на вкладку Шляхи .
    Перевірте параметри:
    Перемикач кнопки Використання модуля слід вибрати вихідний шлях компіляції .

    Шлях виводу повинен бути всередині вашого проекту. Також тестовий шлях виводу повинен бути каталогом всередині вашого проекту. Наприклад, це може виглядати приблизно так:
    Вихідний шлях: C: \ шлях \ до \ ваш \ модуль \ вашModule \ target \ class
    Тестовий шлях виходу: C: \ шлях \ до \ ваш \ модуль \ yourModule \ target \ test-класів

    Виключити вихід шляхи повинні бути відмінені.

10
Build -> Rebuild ProjectЩо для мене спрацювало відновлення проекту ( ). Дякую!
Франсіско К.

Це рішення працювало для мене, останнє, що стосується модулів та використання вихідного шляху. Дякую.
Мохаммед Ганджі

Як більш відчайдушне рішення, видаліть файл .idea та знову відкрийте проект. Однак ви втратите певну конфігурацію / налаштування.
Аарон

Налаштування <project-root>/src/test/javaяк тестовий корінь, і Build -> Rebuild Projectпрацював для мене. Також, коли класи, що містять тести, були в пакеті з назвою пакета, починаючи зjava.* , я отримав виняток із безпеки.
Головний начальник

Проблема в тому, що залежності були застарілими
dellasavia

17

Це також може статися, якщо ваша тестова папка була імпортована як окремий модуль (на піктограмі папки у вікні проекту показаний невеликий квадрат).
Вийміть модуль, вибравши тестову папку у вікні проекту та натисніть DEL.
Потім починайте свій тест.
Якщо з'являється спливаюче діалогове вікно із повідомленням про помилку, що жоден модуль не обраний, вкажіть свій кореневий модуль зі спадного меню.


3
Це була і моя проблема (квадрат на тестовій папці - не знав би, що це означає!); щоб виправити, я відкрив конфігурацію запуску і виявив, що для використання тестового модуля встановлено "Використовувати шлях до класу модуля:". Я змінив його на шлях класу свого проекту, і він відмінно працював. Дякуємо, що вказали на "окремий модуль" gotcha!
Redboots

Саме це сталося зі мною. Я створив проект Spring за допомогою start.spring.io і відкрив його. Після цього я запустив SpringBootTest і наткнувся на помилку "Клас не знайдено:" ... "Порожній тестовий набір". Після виконання рішення та натискання кнопки DELETE у тестовій папці та відтворення конфігурації запуску все було добре. Додатковий натяк: При натисканні кнопки видалення в тестовій папці з'являється діалогове вікно, що говорить про те, як "жодні файли не будуть видалені". Тож без страху натискання кнопки.
kleenxcoder

14

У мене була подібна проблема після запуску нового проекту IntelliJ. Я виявив, що "збір вихідного контуру модуля" для мого модуля не вказаний належним чином. Коли я призначив шлях у модулі "компілювати вихідний шлях" до потрібного місця, проблема була вирішена. Шлях виводу компіляції призначений у налаштуваннях проекту. У розділі Модулі виберіть включений модуль і виберіть вкладку Шляхи ...

Вкладка Шляхи в Налаштуваннях проекту | Діалогове вікно модулів

скріншот

... Я надіслав висновок компілятора в папку з назвою "вихід", яка присутня в батьківській папці Project.


14

У моєму випадку у мене все було в потрібному місці, але я працював над java-бібліотекою з котліном . Я просто забув застосувати плагін:

apply plugin: 'kotlin-android'

І зараз це працює так, як очікувалося зараз.


1
Те саме для мене. Прикро, що при створенні модулів немає варіанту Котліна.
Руперт Роунслі

11

Отже, моя проблема тут була з іменами папок. Я назвав свою папку коду Класи 2016/2017, що IntelliJ не сподобалось. Просто видаліть косу рису (або інший ображаючий символ на шляху), повторно імпортуйте проект, і ви будете готові йти!


Це мені допомогло. Для інших у мене була папка в Dropbox. Коли я перемістив його з Dropbox і повторно імпортував, проблема пішла.
Мік Сір

Ця відповідь заслуговує на Нобелівський приз миру!
Алі Аббас Джафрі

7

В Android Studio 3.0 + іноді тести інтерфейсу інтерпретуються якось як одиничні тести, і це не вимагає вибору цільового розгортання. Ви можете перейти до редагування конфігурації та позначити її як тест інтеграції, і вона почне працювати


Також на Android Studio 3.0.1 кнопка запуску поруч із тестом не працює. Після оновлення до 3,1 каналу 8 він знову почав працювати.
Марк

6

У мене була така ж проблема, і перебудова / недійсний кеш тощо не працював. Здається, це просто помилка в Android Studio ...

Тимчасове рішення - просто запустити свої тести на одиницю з командного рядка з:

./gradlew test

Дивіться: https://developer.android.com/studio/test/command-line.html


6

Якщо проект має компіляцію, тести можуть не працювати. Отже, спочатку будуйте проект як Build -> Build Project. Після успішної компіляції повторно запустіть тест.

Якщо нічого не виходить, просто закрийте вікно проекту та видаліть проект та повторно імпортуйте проект Gradle / Maven, який встановить усе для вас, замінивши наявні файли, створені IntelliJ. Це видалить створений недійсний кеш.

Ви також можете просто визнати недійсним кеш.

File -> Invalidate Caches/Restart


5

У мене виникло те саме питання, коли я імпортую деякі jarз Maven, і згодом викликати empty-test-suiteпомилку.

У моєму випадку це було тому, що Maven скидає файли модулів. Що я вирішив, очистивши конфігурацію за замовчуванням:

  1. Відкрити структуру проекту за допомогою ярлика shift- ctrl- alt-s

Знімок екрана джерел PModules

  1. Подивіться на Модулі> Джерела та заповніть пакет Джерела чи тестовий пакет.

5

Проект або модуль повторного імпорту може вирішити проблему. Я вирішив цю проблему, перейменувавши ім'я пакета при розробці. Але вихідний і вихідний вихідний шлях - це старий шлях. Отже, intellij не може знайти клас зі старого шляху. Таким чином, найпростіший спосіб - це виправити вихідний шлях і тестовий вихідний шлях.

Налаштування модуля Intellij


Чомусь спадковий шлях проекту не працює для мене на MacO, чи є у вас ідеї, чому це може відбуватися?
Johnny_D

@Johnny_D Ви впевнені, що ваша проблема пов’язана з перейменуванням пакета?
Bejond

5

У мене був той самий випуск (Android Studio 3.2 Canary 4), і я спробував більшість пропозицій, описаних в інших відповідях - без жодного успіху. Зверніть увагу , це сталося після того, як я переїхав файл з testвandroidTest папці. Це було показано в конфігураціях запуску як тест замість інструментального тесту.

Я нарешті закінчую створення нового файлу:

  1. Створіть новий інструментальний тестовий клас з іншою назвою.
  2. Скопіюйте весь код зі свого класу.
  3. Виконати його.
  4. Видалити старий клас.
  5. Перейменуйте новий клас на потрібне ім’я.

Непогана ідея =) Дякую!
Андрій Росте

5

Цікаво, що я стикався з цим питанням багато разів через різні причини. Наприклад, також допомогли недійсний кеш і перезапуск .

Останнє я виправив, виправивши вихідний шлях у Файл -> Структура проекту -> Проект -> Компілятор проекту Вихід до: absol_path_of_package / out

наприклад: / Користувачі / випадковий хлопець / myWorkspace / src / DummyProject / out


Саме цей мій тест змусив працювати! Дякую!
Френк

3

Це також станеться, коли ваш модуль та / або проект-jdk неправильно налаштовані.


Будь ласка, уточніть "правильну конфігурацію". Я не думаю, що це корисно для користувачів із цією проблемою. Дякую!
яєчники

3

Видалення .ideaта повторний імпорт проекту SBT вирішило для мене це питання.


Вона працює після видалення папки .idea та повторного імпорту проекту maven (y)
Amine Soumiaa

Це було те саме для мене. Я переглянув пропозиції вище, але жодна не працювала. Я видалив базову папку .idea, а також файли .iml у підмодулях.
Денніс

3

У моєму випадку IntelliJ не зібрав тестові джерела з дивної причини. Я просто змінив конфігурацію збірки та додав мету Maven clean test-compileу Before launchрозділ


Перепробував усе вище, але тільки це допомогло :) Дякую!
Антенка

2

У моєму випадку виникла проблема з назвою тесту :).

Якщо назва була: dummyNameTestтоді не знайдіть тестів, де їх знайшли, але у випадку, якщо testDummyNameвсе було нормально


1

У мене було те саме питання. У моєму випадку у мене було кілька тестових класів у пакеті / папці поза основною папкою. Але коли я перевіряв конфігурацію Run, він завжди намагався шукати класи всередині основної папки (а не мої пакунки поза основною). Отже, якщо це так, вам або доведеться перемістити ваші пакунки туди, куди вказує конфігурація Run. Або змінити конфігурацію запуску, щоб вказати на ваші пакети.


1

Чи потрібен ваш тест для пристрою Android (емулятор або апаратне забезпечення)?
Якщо так, це називається "інструментальним тестом" і знаходиться в "модулі-ім'я / src / androidTest / java /".
Якщо ні, це називається "тест локальної одиниці" і знаходиться в "модулі-імені / src / test / java"

https://developer.android.com/training/testing/start/index.html

Я отримав таку ж помилку, оскільки написав тест на локальній одиниці, але він був поміщений у папку для інструментальних тестів. Переміщення тесту локальної одиниці у папку "src / test / java" зафіксувало для мене.


1

Була така ж помилка. Мій пристрій не було підключено до андроїд-студії. Коли я підключився до студії. Це працює. Це вирішує мою проблему.


1

Це, мабуть, тому, що папка не встановлена ​​як джерело тестування, що можна зробити за допомогою Налаштування модуля> Модулі.


1

Для мене проект був складений поза проектом. Я просто змінюю шлях. Для зміни шляху (я використовую mac).

  • Перейдіть у меню Файл -> Структура проекту
  • Перейдіть до модуля зліва.
  • Виберіть Шляхи, виберіть перемикач (використовувати модуль складання вихідного контуру)
  • Надайте вихідний шлях та тестовий вихідний шлях, який знаходиться всередині вашого проекту
  • Скасувати вибір Виключити вихідні шляхи.
  • Перейдіть у меню Файл -> Клацніть недійсний кеш і перезапустіть

1

У моєму випадку проблема була виправлена, перейшовши на мій build.gradleі змінившись

dependencies {
    testImplementation 'junit:junit:4.12'
}

до

dependencies {
    testCompile 'junit:junit:4.12'
}

Це мені також допомогло напрочуд. Видимо, це змусило перекомпілювати. Спробував кілька прибирань / кеш-пам'яти раніше, без допомоги
Дітер Менне

Оскільки це варте, питання для мене було вирішено як рішення, яке я пропоную вище. Однак причина полягала в тому, що я використовував плагін, який не підтримував команду "виконання". Тому я б запропонував вам побачити, чи є в деяких плагінах вашого проекту оновлення. Можливо, кращим підходом було б оновити плагін, оскільки Gradle хоче
знести

1

Я спробував усі рішення, але жодне з них не допомогло. Наприкінці я запускаю тест в режимі налагодження і .... він почав працювати. Можливо, якийсь кеш-мавс був очищений. Важко сказати. Це працює. Спробуйтеmvn test -X


1

Просто натисніть правою кнопкою миші на файлі у вікнах проектів і виберіть

"Запустити YourTest ".

Зараз все починається нормально, можливо, тому, що несправна конфігурація запуску відновлюється заново.


1

Це може статися (принаймні один раз для мене;) після встановлення нової версії IntelliJ, а плагіни IntelliJ ще не оновлювалися.

Можливо, доведеться це зробити вручну Check for updates…з меню довідки IntelliJ.


1

У вашій структурі проекту Maven src / main / java клацніть правою кнопкою миші на директорії java та виберіть опцію Позначити каталог як -> Sources Root

Аналогічно зробіть те ж із тестовою директорією, так: src / test / java клацніть правою кнопкою миші на директорії java та виберіть опцію Позначити каталог як -> Коренований джерело джерел

Для мене працювали :-)


1

виконайте наступні кроки в Intellij (із знімками екрана для кращого розуміння):

  1. перейдіть до Файли -> Структура проекту

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

  1. перейдіть до модулів і тепер виберіть модуль, у якому присутній ваш тестовий файл Junit, і виберіть перемикач "Використовувати модуль складання вихідного контуру".

  2. Згадайте шлях до папки відповідних класів, подібний до скріншоту, який додається.

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

  1. Подайте заявку і добре. Це працювало для мене!

0

Тут же проблема з використанням IDEA 15.0.6, і нічого не допомогло, крім випадків, коли я перейменував пакет, в якому був тестовий клас. Після цього я перейменував його на початкове ім'я, і ​​він все ще працював, тому дія перейменування могла очистити деякий кеш.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.