Java.lang.Exception: не найдено совпадений с методом Intellij IDEA

Я испытываю странное поведение Intellij IDEA 2016.3. Имея класс с методом foo и JUnit-тест для метода, когда я получаю java.lang.Exception: No tests found matching Method foo при запуске теста. После выполнения mvn test он преуспевает, а затем запускает unit test сразу после выполнения команды mvn, он внезапно запускается зеленым. Похоже, что IDEA не компилируется автоматически. Как я могу это исправить?

P.S. После обновления до версии 2016.3 никакие настройки не были изменены.

Ответ 1

Что ж, после "игры" с настройками запуска каждого модульного теста я заметил, что в каждой конфигурации запуска есть предустановка цели Build в опции " Before Launch (см. Рис. Ниже): enter image description here

После изменения Build на Build Project тесты работают нормально.

Ответ 2

Та же проблема, что и с Gradle (4. 5+) + новая функция Build Cache

Иногда он не может найти новые методы тестирования и выдает исключение (как вы упомянули в теме)

Решение: чистый .gradle, build и out каталогов и попробуйте еще раз;)

Ответ 3

Если вы используете платформу для тестирования теории, например Junit's или Robolectric's, обязательно запустите класс, содержащий требуемый тест, вместо этого сам тест. Поскольку эти рамки используют методы тестирования как методы экземпляра вместо статических методов, любая среда тестирования, ищущая обычный тест public static, не найдет ничего.

Ответ 4

Удаление каталога Intellij out устранило эту проблему для меня.

Ответ 5

Если вы первоначально запускали тест с именем "foo", а затем переименовали его в "fooBar" , вы должны впоследствии запустить "fooBar" с новой конфигурацией выполнения.

Если вы используете ту же исходную конфигурацию запуска для "foo" для запуска "fooBar" , она по-прежнему ищет тест с именем "foo", который он не находит (таким образом, исключение), потому что он был переименован в "fooBar" . Новая конфигурация запуска правильно проверит тест "fooBar" .

Я сделал эту ошибку неосознанно, потому что я переименовал тест, но затем просто нажал кнопку зеленого запуска в IntelliJ: для этого выполняется последняя Run Configuration, которая в этом сценарии имеет старое имя "foo".

Ответ 6

В дополнение к другим ответам здесь: ошибка также может произойти, если вы забудете @Test до объявления вашего метода тестирования. IntelliJ (2018.1) все равно покажет вам зеленую "кнопку воспроизведения" для выполнения теста, но этот публичный метод в вашем Test-Class не будет настоящим тестом.

Ответ 7

Может быть, вы просто даете неправильное имя для метода тестирования.

Я столкнулся с этой проблемой, потому что я использовал '-' вместо '_', который intelliJ не может представлять.

Ответ 8

Удостоверьтесь, что у вас есть правильный бегун, упомянутый выше вашего класса.

Я получал это странное сообщение, когда я использовал runner CucumberWithSerenity.class. Когда я изменился на SerenityRunner.class, он был исправлен.

@RunWith(SerenityRunner.class)
//@RunWith(CucumberWithSerenity.class)
public class WordPressAppTest {

Я использую платформу Serenity для веб-автоматизации и использую ниже класс runner

import net.serenitybdd.cucumber.CucumberWithSerenity;
import net.serenitybdd.junit.runners.SerenityRunner;
import org.junit.runner.RunWith;

Я чувствую, что IDEA (2017.2.6) может показать некоторое сообщение об ошибке, чем это

Ответ 9

Убедитесь, что ваш тест общедоступен

Ответ 10

Для тех, кто смешивает тесты JUnit 4 и JUnit 5 (например, у вас есть тесты JUnit 4, и теперь вы хотите добавить параметрическое тестирование с JUnit 5), тогда это для вас. Если у вас есть импорт, как это:

import org.junit.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;

Вы смешали импорт. Вы можете получить исключение

java.lang.Exception: не найдено ни одного теста, соответствующего методу foo...

Обновите весь импорт до JUnit 5:

import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;

Исключения JUnit Vintage должны прекратиться.

Ответ 11

Такая ситуация также может возникнуть, если вы не разместите аннотацию @Test над методом тестирования.