Не знайдено тестів із тестовим бігуном "JUnit 4"


105

Мій тест Java добре працював із Eclipse. Але тепер, коли я запускаю тест із меню запуску, отримую таке повідомлення:

No tests found with test runner 'JUnit 4'

У .classpathфайлі у мене є всі jarфайли, а в кінці є:

<classpathentry exported="true" kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

Як я можу вирішити цю помилку і знову запустити тести?


1
Чи можете ви розмістити вміст свого тесту (або принаймні декларацію класу). Також ви писали "в кінці є:" ні з чим іншим.
phtrivier

перевірте це .. це повинно допомогти stackoverflow.com/questions/22469480/junit-no-tests-found
prasad vsv

Про 5
червня

Відповіді:


156

це зі мною щойно трапилось Перебудова або перезапуск Eclipse не допомогло.

Я вирішив це, перейменувавши один із методів тестування, щоб почати з "тестування ..." (стиль JUnit3), і тоді всі тести знайдені. Я перейменував його на те, що було раніше, і воно все ще працює.


7
у мене є метод, як testQuotesі інші методи, які не починаються з тесту, але все одно я отримую Не знайдено тестів про помилку
Рейчел

1
У мене була така ж проблема з класом, який розширюється junit.framework.TestCase, і мої методи потрібно було почати з "тесту". Замість того, щоб продовжувати TestCase, я додав імпорт:, import static org.junit.Assert.*;і я можу назвати свої методи, як я хочу. Bizarre ...
MrDrews

6
Якщо серйозно, навіть якщо тест позначається на @Test, ім'я функції тесту все ж має бути встановлено з "тест"?
Брайан Шотола

4
Ви також можете додати до цього списку також 2015 та Eclipse Luna. Насправді багато моїх методів @Test все ще починаються з префікса "test". Я видалив цей префікс на одному тесті, зберег, і тоді всі тести були знайдені. Після цього я додав його назад, і всі тести продовжували знаходитись. Здається, більше йдеться про зміну методу (файлу?) Таким, що Eclipse знову все виявить.
Брайан Уайт

2
Android Studio 2.1.1, травень 2016 року, як і раніше працює. Цікаво, чи спрацює ця відповідь до кінця Всесвіту.
Блуерівер

42

Коли ми отримуємо ці помилки, здається, Eclipse просто плутається. Перезапустіть Eclipse, оновіть проект, очистіть його, нехай Eclipse відновить його та повторіть спробу. Найчастіше це працює як чарівність.


1
Так, я працював і для мене, і згоден з dlamblin. Добре нагадування про те, що завжди намагайтеся перезапустити будь-яку дивну проблему, яку неможливо вирішити протягом перших 5 хвилин випередження.
Thien

3
У мене виникла ця проблема, і я закрив вихідний файл, де я визначив свій тестовий клас, двічі клацнув на цьому файлі в навігаторі, і він спрацював. Тож закриття та повторне відкриття файлу спрацювало без перезапуску Eclipse.
метамат

11
це дійсно змушує мене шукати нову IDE. це працювало для мене.
Сет М.

1
закриття та повторне відкриття проекту вирішили це для мене!
Мартін Чарльзворт

34

У контекстному меню каталогу "test" виберіть "Збірка контуру" -> "Використовувати як вихідну папку". Eclipse повинен бачити файли unitTests.java як вихідні файли. Попередження "Не знайдено тестів JUnit", оскільки у каталозі "build" немає файлів unitTests.class


Це рішення, яке працює для мене. Перезапуск не працює.
Андрі

Це те, про що я пішов, оскільки мені доведеться мати папку "test" не в папці "src". Я зробив це, потім відкрив / закрив проект, як пропонують інші відповіді, і тепер він складається і працює як тест JUnit. Дякую!
quux00

Я зробив те ж саме, вибравши проект -> Java build path -> Source -> додати тестову папку. Велике дякую!
Пітер Клауз

Якщо src / test / groovy вже стоїть на вашому шляху збірки як вихідна папка, видаліть його та знову додайте. Простіше, ніж видалення та заміна @Test у кожному тестовому файлі ...
geneSummons

32

Перевірте, чи поширюється ваш тестовий клас "TestCase". якщо так, вилучіть це застереження. Ваш клас не повинен поширюватися з класу "TestCase". Це більшість випадків, які я зустрічав.

public class MyTestCase extends TestCase{
  @Test
  public void checkSomething() {
    //...
  }
}
//Result> AssertionFailedError: No test Found in MyTestCase

Слідом за TestCase має бути добре.

public class MyTestCase {
  @Test
  public void checkSomething() {
    //...
  }
}
//Works fine

Це дійсно правильна відповідь. Я тестував його за допомогою IntelliJ та JUnit 4.1, і він працює!
Діо Пхунг

Проблема, з якою я стикаюсь, полягає в тому, що при затьмаренні мої тести JUnit працюють нормально, але коли я експортую їх у JAR, я отримую вказану вище помилку. Якісь ідеї?
tryToLearn

Чи навпаки в ці дні? Додавання "розширює TestCase" вирішило проблему для мене.
Хайнцльман

Працювали для мене !!! Спасибі
JRichardsz

27

Я зіткнувся з тією ж проблемою, і я налагодив її на поганих прикладах в Інтернеті та інтернеті Джуніт. В основному не змушуйте класу розширювати TestCase, як показують деякі приклади для Junit 4.x. Використовуйте тест на встановлення імен, якщо ви хочете мати анотацію, ви можете використовувати @RunWith (JUnit4.class).

Якщо вам потрібен доступ до методів затвердження, розширте Assert або використовуйте статичний імпорт.

Якщо ваш клас розширює TestCase, то навіть якщо ви використовуєте Junit 4 Runner, він буде працювати як 3. Це тому, що в коді ініціалізації є виявлення:

Див. JUnit3Builder та рядки:

boolean isPre4Test(Class<?> testClass) {
    return junit.framework.TestCase.class.isAssignableFrom(testClass);
}

Це повертається в істину, і тест на сумісність junit4 не буде намагатися.


2
Це вирішило для мене проблему. Якщо ви переглядаєте старі приклади того, як спочатку користуватися Junit, вони збить вас з глузду.
Алекс Кілпатрік

"Якщо ваш клас розширює TestCase, то навіть якщо ви використовуєте Junit 4 Runner, він буде працювати як 3" - це неправда (принаймні для Groovy та Intellij IDEA). Я використовую JUnit 4.12, і я @RunWith(JUnit4)анотував клас із "GroovyTestCase" та продовжив його. Без @RunWith(JUnit4)мене не виникає однакових проблем.
Вечеслав Гайдарджи

Поведінка залишається такою ж, як і у 2017 році (JUnit 4.12).
шармаап

5

Спробуйте додати

@ Тест вище методу для тесту, як це

@Test
public void testParse()
{

}

5

Ще одне можливе рішення, яке я кину в кільце: мені не вдалося запустити тестовий клас ні з вікна редактора, ні з Explorer Explorer, але клацнувши правою кнопкою миші на ім'я класу у вікні «Контур» та вибравши «Запустити як JUnit» Тест спрацював ... Перейди фігуру!


так само, з виду контуру це працює, все інше не - я перепробував кожне рішення, розміщене в 3
потоках

Це працює і для мене, але марно для тестування покриття в рамках проекту.
багатий

4

У JUnit4 немає тестових костюмів. Використовуйте замість цього замітки або використовуйте старі умови імен JUnit3.

Приклад:

@RunWith(Suite.class)
@SuiteClasses({YourClassWithTests.class})

4

Це сталося і зі мною. Я спробував перезапустити Eclipse, а також встановив свої тестові методи тестами. Жоден не працював.

Наступний крок працював: Змініть всі методи випробувань, присутні в @BeforeClass та @AfterClass, на статичні.

тобто якщо у вас є метод тестування у форматі нижче:

@BeforeClass
public void testBeforeClass(){
}

потім змініть його на:

@BeforeClass
public static void testBeforeClass(){
}

Це працювало для мене.


4

Я знайшов відповідь:

Цю помилку я отримав, коли виконав тестовий автономний режим від eclipse (клацніть правою кнопкою миші на методі та вирішив запустити тест на Джуніт),

Коли я виконував повний клас як тест на Джуніт, тест виконувався правильно з параметрами.


3

Коли я стикаюся з цією проблемою, я просто редагую файл і зберігаю його ... працює як шарм


1
Привіт, товариш і ласкаво просимо в Стакковерф! :) Чи можете ви, будь ласка, розробити свою відповідь?
Літтм

@Mahesh Ви маєте на увазі оновити файл (виберіть його та натисніть F5)
Cassian

Я зіткнувся з тією ж проблемою від scala, тобто мої тести написані для JUnit4, але вони в масштабі. І рішення, як пропонує @Mahesh, - дати компілятору поштовх. Не має значення, що ви робите під час редагування файлу, вам просто потрібно його редагувати. Я набираю щось, що дає синтаксичну помилку, зберігаю файл, а потім скасовую і зберігаю знову. Раптом мої тести запускаються. Це трапляється зі мною часто, тобто принаймні кожен день, як правило, кілька разів на день.
Ерік Г. Хагстром

3

Моя проблема полягала в тому, що декларація import org.junit.Test;зникла (або не була додана?). Після його додавання мені довелося видалити ще одну importдекларацію (Eclipse натякає вам, яку) і все почало працювати знову.


3

Дуже пізно, але те, що вирішило проблему для мене, було те, що назви моїх методів тестування почалися з великих літер: "тест на публічну невізмість". Зробіть нижню букву t спрацьованою.


це працює для мене ... але це дивно заплутане рішення
Анхіт Міттал

2

Я спробував рішення від Германа. Він працював для всіх методів у моєму класі, але у мене багато класів у моєму проекті.

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

Сподіваюся, це допомагає.


2

Шість років пізніше ... і все ще виникають проблеми з Eclipse і час від часу не знайти JUnits.

У своєму Eclipse Mars 2 я виявив, що він не розпізнає тестові класи, витягнуті з git, якщо @Testу файлі більше 9 або 10 приміток. Мені потрібно прокоментувати будь-які додаткові тести, запустити тестовий клас, а потім відмітити їх та повторно запустити клас. Піди розберися...


Ця відповідь тут корисна, у мене не було точно такої ж ситуації, але назви методів тестування були досить схожими, і затемнення виявило проблему їх пошуку. Як і testCase01, testCare02 ... Мені довелося коментувати інші "testCasexx" методи, щоб запустити testCase01, інакше він кидає виняток. Здійснення всіх методів тестування ПУБЛІЧНИМ, здається, вирішило це питання !!
01000001

1

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

Але це може спричинити повідомлення про помилку "Не знайдено тестів із тестовим бігуном" JUnit 4 ".

Або ви зробили модифікацію у своєму тестовому класі, видаливши @Testанотацію.
Дивіться цю сторінку вікі .


@Test тут, повідомлення таке: не вдалося вказати основний клас toto.lolo.testrunner (який вказано в конфігурації запуску)
user281070

@lamisse: значить, якесь питання про класний шлях? або проблема з синтезами: це має бути, toto.lolo.Testrunnerа не toto.lolo.testrunner('T')
VonC,

@lamisse: це "toto.lolo.Testrunner" власне назва вашого класу TestRunner? Це щось ти написав? Чи проект / jar містить його в класі вашого конфігурації запуску?
phtrivier

1

Я також зіткнувся з тим же питанням під час запуску тесту JUnit. Я вирішив це, поставивши анотацію @Test трохи вище основної функції тесту.


1

Що виправило мій випадок, було схоже на відповідь @ JamesG: я перезапустив Eclipse, відновив проект та оновив його; АЛЕ перед тим, як я зробив щось із цього, я спершу закрив проект (клацніть правою кнопкою миші проект у Explorer Explorer -> Закрити проект), а потім знову відкрив його. Тоді це спрацювало.

Рішення для вирішення я знайшов, перш ніж знайти це кінцеве рішення, яке я щойно описав: Скопіюйте тестовий клас та запустіть тестовий клас як JUnit.


1

Перевірте, чи папка, у якій знаходяться ваші тести, є вихідною папкою. Якщо ні - клацніть правою кнопкою миші та використовуйте як вихідну папку.



1

Є ще один шанс, можливо, ви змінили тест Junit з нижчої версії (наприклад, 3 червня) на 4 червня. Так виконайте нижче кроки: -

1. Right Click on class
2. Select Run as >> "Run Configurations"
3. Check your "Test Runner" option in new window
4. If it not same as maven change it for example change it as Junit 4.

1

Додайте @Testповерх тесту.
Наведіть курсор миші на примітку.
Оберіть "додати бібліотеку червня 4 до classpath"


0

Чи базується ваш проект Eclipse? Якщо це так, можливо, вам доведеться оновити версію m2eclipse.

Лише швидка примітка: у мене є проект у Eclipse, який базується на Maven, і генерується спочатку за допомогою майстра "нового проекту Maven" у Eclipse. Я використовую JUnit 4.5 для одиничних тестів, і міг би із задоволенням запустити тести з командного рядка за допомогою Maven, а також окремі тести Eclipse, використовуючи запуск як тест JUnit .... Однак, коли я намагався запустити всі тести у проекті, викликаючи запуск як тест JUnit ... на кореневому вузлі проекту, Eclipse поскаржився на те, що " не знайдено тестів із тестовим запуском червня 4 ". Вирішено шляхом оновлення m2eclipse до останньої збірки стабільної розробки з сайту оновлення m2eclipse (конкретно, я оновив версію 0.9.8.200905041414 до версії 0.9.9.200907201116 в Eclipse Galileo).

Звідси: http://nuin.blogspot.com/2009/07/m2eclipse-and-junit4-no-tests-found.html


Я не розумію, я не думаю, що це пов’язано з версією eclispe, мій тест працював вчора, а не так зараз, оскільки спливаюче вікно запуску Junit є спосіб перевстановитись на мою першу конфігурацію?
користувач281070

Ламіссе, я теж розгублений. Я пропоную вам оновити своє запитання, щоб пояснити, коли працює тестовий запуск блоку та коли він не працює.
b.roth

0

Це сталося і зі мною. Я виявив, що в Eclipse я не створив новий файл Java-класу, і тому його не компілювали. Спробуйте скопіювати свій код у файл класу java, якщо його ще немає, а потім компілюйте.


0

Я з'ясував, що Eclipse, здається, виконує лише тести стилю JUnit 3, якщо ваш тестовий клас поширюється на TestCase. Якщо ви видалите спадщину, анотації працювали для мене.

Не забудьте статично імпортувати всі необхідні assert*методи, як-от import static org.junit.Assert.*.


0

Я повинен був зробити mvn чистим у командному рядку, а потім проект-> clean у затемненні. Я заздалегідь перейменував клас, потім перейменував його назад, але я сумніваюся, що це допомогло.


0

Я також запускаю Eclipse з Maven (m2e 1.4). Тести виконувались з Maven, але не з Eclipse ... навіть після декількох застосувань Maven>Update project.

Моє рішення полягало в тому, щоб додати кілька рядків у .classpath, породжений m2e. Тепер лінії стирчать.

<classpathentry kind="src" output="target/test-classes" path="src/test/java">
  <attributes>
    <attribute name="optional" value="true"/>
    <attribute name="maven.pomderived" value="true"/>
  </attributes>
</classpathentry>

0

У мене є час від часу ця проблема. Найбільше для мене вирішує цю проблему - це запустити тест JUnit з конфігурацій Run ..., гарантуючи, що JUnit 4 встановлений як тест-бігун.

Як правило, я бачу цю проблему під час спроби запустити як ... Джуніт-тест із контекстного меню Провідника пакетів. Якщо ви клацніть правою кнопкою миші код тесту, який ви намагаєтеся запустити, а замість вибору Run As ... Junit Test виберіть Запустити конфігурації ... переконайтесь, що проект, тестовий клас та тестовий бігунок встановлені правильно, натиснувши застосувати, а потім запустіть працює весь час для мене.


0

Я почав працювати з Selenium і Eclipse на своїй роботі, і я робив свій перший автоматизований тест, і я видалив з коду @Before, @Test і @After notes, і у мене виникло це питання "Жодних тестів із тестовим бігуном junit4 не знайдено" .

Моє рішення було просто додати ще раз ноти @Before, @Test і @After, і з цим мій сценарій спрацював. Важливо не видаляти це з коду.

Це простий тест, за допомогою якого Google шукає щось:

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;

import org.junit.*;

import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class TestingClass {

    private WebDriver driver;
    //Creates an instance of the FirefoxDriver
    **@Before**
    public void SetUp() throws Exception {
        driver = new FirefoxDriver();
    }

    **@Test**   
    //Search using keyword through Google Search
    public void TestTestClass2 () throws Exception {
        driver.get("http://www.google.com.mx/");
        driver.findElement(By.name("q")).sendKeys("selenium");
        Thread.sleep(10000);
        driver.findElement(By.name("btnG")).click();
        Thread.sleep(10000);
    }

    //Kill all the WebDriver instances
    **@After**
    public void TearDown() throws Exception {
        driver.quit();
    }

}

0

Використовуючи ScalaIDE (3.0.4-2.11-20140723-2253-Typesafe), у мене була подібна проблема з Right Click Scala Test Class-> Run As -> Scala Junit Testконтекстним меню.

Я спробував редагувати клас (але не для помилки компіляції), очищення, закриття проекту, закриття Eclipse. Жоден із них не працював над тим, щоб відновити контекстне меню для класів, які раніше добре працювали. Тестові класи не використовують @Testанотацію, а замість цього використовують @RunWith(classOf[JUnitRunner])анотацію у верхній частині класу, використовуючи код ScalaTest.

Коли я спробував вибрати Scala Junit Testбезпосередньо з редактора запуску запустити конфігурацію, я отримав діалог із питання. Відповідь Footix29 була для мене ключовою.

Я помітив, що, хоча я кілька разів очищав свій проект, мої заняття в каталозі / bin фактично не відбудовувались за деякий час.

Ось як я повернувся до контекстного меню і зміг ще раз запустити Scala Junit Tests:

  • manuallyочистив класи, видаливши /bin/<package dir>*через Провідник
  • Project -> CleanРед. проекту разом із повною перебудовою

Я підозрюю, що редагування класу в цілому здатне очистити збережений стан Eclipse і повернути його знову. У моєму випадку всі раніше працюючі класи, які я намагався, не змоглиmanual чистий крок був просто молотом, який мені потрібен. Однак інші хитрощі, які впливають на концепцію Eclipse щодо стану класу / стану складання, також повинні працювати.

Далі, я думаю, що ця поведінка була частково спровокована спробою змінити клас Scala шляхом його перейменування (що IDS Scala Eclipse IDE засмоктується), де все очищення після початкової зміни файлів є вручну. Помилок побудови не було, але також не було попереджень про те, що я очікував, що щось напевно застрягло в інформації про стан збірки Eclipse.

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