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

Как я могу устранить эту ошибку и снова запустить тесты?

user281070
источник
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 восстановить его и повторите попытку. В большинстве случаев это работает как шарм.

JamesG
источник
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 не будет выполняться.

Toomasr
источник
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})
Роман C
источник
4

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

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

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

@BeforeClass
public void testBeforeClass(){
}

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

@BeforeClass
public static void testBeforeClass(){
}

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

Revindran
источник
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. Это сработало для всех методов моего класса, но в моем проекте много классов.

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

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

Footix29
источник
2

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

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

SimonB
источник
Этот ответ здесь полезен, у меня не было точно такой же ситуации, но имена методов тестирования были очень похожи, и у eclipse возникла проблема с их поиском. Как и testCase01, testCare02 ... Мне пришлось прокомментировать другие методы "testCasexx", чтобы запустить testCase01, иначе он выдаст исключение. Сделав все методы тестирования общедоступными, эта проблема решена !!
01000001,
1

Возможно, ваша конфигурация запуска JUnit была для отдельного тестового класса, и вы каким-то образом изменили эту конфигурацию, чтобы «запускать все тесты в исходной папке, пакете или проекте»

Но это могло вызвать сообщение об ошибке «Тесты не найдены с средством запуска тестов 'JUnit 4'».

Или вы внесли изменения в свой тестовый класс, удалив @Testаннотацию.
См. Эту страницу вики .

VonC
источник
@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

Закройте и откройте проект, который у меня сработал.

пользователь3022123
источник
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

b.roth
источник
Я не понимаю, я не думаю, что это связано с версией 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.

n0741337
источник