Не найдено тестов с средством запуска тестов 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

Для JUnit 5 см здесь
Ананд Rockzz

Ответы:


156

это только что случилось со мной. Перестройка или перезапуск Eclipse не помогли.

Я решил это, переименовав один из методов тестирования, чтобы начать с "test ..." (стиль JUnit3), а затем были найдены все тесты. Я переименовал его обратно в то, что было раньше, и он все еще работает.


7
У меня есть метод, как testQuotesи другие методы, которые не начинаются с теста, но я все равно получаю ошибку «Тесты не найдены»
Рэйчел

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

6
Серьезно, даже если тест аннотирован с помощью @Test, имя тестовой функции все равно нужно предварять префиксом «test»?
Брайан Шотола

4
Вы также можете добавить 2015 и Eclipse Luna в этот список. На самом деле многие из моих @Test-методов по-прежнему начинаются с префикса «test». Я удалил этот префикс в одном тесте, сохранил, а затем были найдены все тесты. Впоследствии я добавил его обратно, и все тесты продолжали обнаруживаться. Похоже, это больше касается изменения метода (файла?), Чтобы Eclipse все заново обнаруживал.
Брайан Уайт

2
Android Studio 2.1.1, май 2016 г., все еще работает. Интересно, будет ли этот ответ работать до конца вселенной.
Blueriver

42

Когда мы получаем эти ошибки, кажется, что Eclipse просто сбит с толку. Перезапустите Eclipse, обновите проект, очистите его, дайте Eclipse восстановить его и повторите попытку. В большинстве случаев это работает как шарм.


1
Ага у меня тоже сработало и согласен с dlamblin. Хорошее напоминание о том, что всегда нужно пытаться перезагрузить компьютер в случае любой странной проблемы, которую невозможно решить в первые 5 минут работы.
Thien

3
У меня возникла эта проблема, и я закрыл исходный файл, в котором я определил свой тестовый класс, дважды щелкнул этот файл в навигаторе, и это сработало. Таким образом, закрытие и повторное открытие файла работали без перезапуска Eclipse.
metamatt 02

11
это действительно заставляет меня искать новую IDE. это сработало для меня.
Сет М.

1
закрытие и повторное открытие проекта исправили это для меня!
Мартин Чарльзуорт

34

В контекстном меню вашего каталога «test» выберите «Путь сборки» -> «Использовать как исходную папку». Eclipse должен видеть ваши файлы unitTests.java в качестве исходных файлов. Предупреждение: «Тесты JUnit не найдены» возникает, потому что в вашем каталоге «build» нет файлов unitTests.class


Это решение, которое мне подходит. Перезагрузка не работает.
Andree

Это то, что я искал, поскольку у меня должна быть папка «test» не в папке «src». Я сделал это, затем открыл / закрыл проект, как было предложено другими ответами, и теперь он компилируется и запускается как тест JUnit. Спасибо!
quux00

Я сделал то же самое, выбрав проект -> Путь сборки Java -> Источник -> добавив тестовую папку. Большое спасибо!
Питер Клауз

Если 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, и он работает!
Дио Фунг

Проблема, с которой я столкнулся, заключается в том, что в eclipse мои тесты JUnit работают нормально, но когда я экспортирую их в JAR, я получаю указанную выше ошибку. Любые идеи?
пытаетсяToLearn

В наши дни все наоборот? Добавление «extends TestCase» решило проблему для меня.
Heinzlmaen

Сработало у меня !!! Спасибо
JRichardsz

27

Я столкнулся с той же проблемой, и я отлаживал ее на плохих примерах в Интернете и внутреннем устройстве junit. В принципе, не заставляйте свой класс расширять TestCase, как показано в некоторых примерах для Junit 4.x. Используйте некоторое соглашение об именах Test или, если вы хотите иметь аннотацию, вы можете использовать @RunWith (JUnit4.class).

Если вам нужен доступ к методам assert, расширьте 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).
sharmaap

5

Попробуйте добавить

@Test выше метода для такого теста

@Test
public void testParse()
{

}

5

Еще одно возможное решение, которое я брошу в кольцо: я не смог запустить тестовый класс ни из окна редактора, ни из проводника пакетов, но щелкнул правой кнопкой мыши имя класса в представлении Outline и выбрал Run As JUnit Тест действительно сработал ... Иди разберись!


То

Для меня это тоже работает, но бесполезно для тестирования покрытия в рамках проекта.
rich

4

В JUnit4 нет тестов. Используйте вместо них аннотации или старые соглашения об именах JUnit3.

Пример:

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

4

Это случилось и со мной. Я попытался перезапустить Eclipse, а также добавил в свои методы тестирования тесты. Ни то, ни другое не сработало.

Следующий шаг сработал: измените все ваши тестовые методы, присутствующие в @BeforeClass и @AfterClass, на статические методы.

т.е. если у вас есть тестовый метод в следующем формате:

@BeforeClass
public void testBeforeClass(){
}

затем измените его на:

@BeforeClass
public static void testBeforeClass(){
}

Это сработало для меня.


4

Я нашел ответ:

Я получил эту ошибку, когда выполнил автономный тест из eclipse (щелкните правой кнопкой мыши метод и выберите запуск как тест junit),

Когда я выполнил весь класс как тест junit, тест прошел правильно с параметрами.


3

Когда я сталкиваюсь с этой проблемой, я просто редактирую файл и сохраняю его ... работает как шарм


1
Привет, дружище, и добро пожаловать в Stackoverflow! :) Не могли бы вы уточнить свой ответ?
Littm

@Mahesh Вы имеете в виду обновить файл (выберите его и нажмите F5)
Кассиан

Я столкнулся с той же проблемой в scala, т.е. мои тесты написаны для JUnit4, но они в scala. И решение, как предлагает @Mahesh, - дать компилятору толчок. Неважно, что вы делаете при редактировании файла, вам просто нужно отредактировать его. Я ввожу то, что дает синтаксическую ошибку, сохраняю файл, затем отменяю и снова сохраняю. Внезапно мои тесты запускаются. Это случается со мной часто, то есть, по крайней мере, каждый день, обычно несколько раз в день.
Эрик Г. Хагстрем,

3

Моя проблема заключалась в том, что объявление import org.junit.Test;исчезло (или не было добавлено?). После добавления мне пришлось удалить еще одно importобъявление (Eclipse подскажет, какое именно), и все снова заработало.


3

Очень поздно, но для меня проблему решило то, что все имена моих тестовых методов начинались с заглавных букв: «public void Test». Создание нижнего регистра t сработало.


это работает для меня ... но это странно сбивающее с толку решение
Анчит Миттал

2

Я попробовал решение от Germán. Это сработало для всех методов моего класса, но в моем проекте много классов.

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

Надеюсь, поможет.


2

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

В моем Eclipse Mars 2 я обнаружил, что он не распознает тестовые классы, извлеченные из git, если @Testв файле более 9 или 10 аннотаций. Мне нужно закомментировать любые дополнительные тесты, запустить тестовый класс, затем раскомментировать их и повторно запустить класс. Иди разбери ...


Этот ответ здесь полезен, у меня не было точно такой же ситуации, но имена методов тестирования были очень похожи, и у eclipse возникла проблема с их поиском. Как и 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, перестроил проект и обновил его; НО, прежде чем я сделал что-либо из этого, я сначала закрыл проект (щелкните правой кнопкой мыши проект в проводнике пакетов -> Закрыть проект), а затем снова открыл его. Тогда это сработало.

Обходное решение, которое я нашел до того, как нашел окончательное решение, которое я только что описал: скопируйте тестовый класс и запустите тестовый класс как JUnit.


1

Убедитесь, что папка, в которой находятся ваши тесты, является исходной папкой. Если нет - щелкните правой кнопкой мыши и используйте как исходную папку.



1

Есть еще один шанс, что вы могли изменить Junit Test с более ранней версии (например, Junit 3) на Junit 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поверх теста.
Наведите указатель мыши на аннотацию.
Выберите 'добавить библиотеку junit 4 в путь к классам'


0

Ваш проект Eclipse основан на maven? Если это так, вам может потребоваться обновить версию m2eclipse.

Просто небольшое примечание: у меня есть проект в Eclipse, который основан на maven и изначально сгенерирован с использованием мастера «нового проекта maven» в Eclipse. Я использую JUnit 4.5 для модульных тестов и вполне могу запускать тесты из командной строки, используя maven, и отдельные тесты из Eclipse, используя запускать как тест JUnit .... Однако когда я пытался запустить все тесты в проекте, вызвав запуск от имени JUnit test ... на корневом узле проекта, Eclipse пожаловался на то, что « не было найдено тестов с средством запуска тестов junit 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, есть ли способ вернуться к моей первой конфигурации?
user281070

Ламисс, я тоже в замешательстве. Я предлагаю вам обновить свой вопрос, чтобы объяснить, когда запуск модульного теста работает, а когда нет.
b.roth

0

Это случилось и со мной. Я обнаружил, что в Eclipse я не создавал новый файл класса Java, поэтому он не компилировался. Попробуйте скопировать свой код в файл класса java, если его еще нет, а затем скомпилировать.


0

Я обнаружил, что Eclipse, похоже, выполняет тесты стиля JUnit 3 только в том случае, если ваш тестовый класс расширяется от TestCase. Если убрать наследование, у меня аннотации сработали.

Помните, что вам нужно статически импортировать все необходимые assert*методы, например import static org.junit.Assert.*.


0

Мне пришлось выполнить mvn clean в командной строке, затем project-> clean в eclipse. Я заранее переименовал класс, а затем переименовал его обратно, но сомневаюсь, что это помогло.


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 установлен как средство запуска теста.

Обычно эта проблема возникает при попытке запустить тест Junit от имени ... из контекстного меню в проводнике пакетов. Если вы щелкните правой кнопкой мыши код для теста, который вы пытаетесь запустить, и вместо того, чтобы выбрать Run As ... Junit Test, вы выберете Run configurations ... убедитесь, что Project, Test Class и средство запуска тестов настроены правильно, нажав Apply, затем запустите у меня все время работает.


0

Я начал работать с Selenium и Eclipse в своей работе, и я делал свой первый автоматический тест, и я удалил из кода заметки @Before, @Test и @After, и у меня возникла эта проблема: «Тесты не найдены с помощью средства запуска тестов 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 путем его переименования (чего не хватает в Scala Eclipse IDE), где вся очистка после первоначального изменения файла выполняется вручную. Ошибок сборки не было, но также не было предупреждений, которые я ожидал, означающих, что что-то определенно застряло в информации о состоянии сборки Eclipse.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.