Итак, мы получили сообщение
Process finished with exit code 0
Empty test suite.
При попытке запустить тесты Junit5 в нашем многомодульном проекте, поэтому для тестирования источников проблемы я решил попробовать новый проект с нуля (я использую IntelliJ IDEA 2018.2.4).
У меня такая же проблема со следующим простым файлом POM проекта:
<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.org.bu.dep.app</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.0.5.RELEASE</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>com.vaadin.external.google</groupId>
<artifactId>android-json</artifactId>
</exclusion>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Я пробовал с / без junit-vintage-engine те же результаты.
Далее следует тестовый класс:
package com.org.bu.dep.app.demo;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class DemoApplicationTests {
@Test
public void contextLoads() {
Assertions.assertTrue(true);
}
}
В окне «Выполнить» написано No tests were found.
Я пробовал много вариантов, таких как с / без аннотации @SpringBootTest, я также пробовал @ExtendWith(SpringExtension.class), но безрезультатно.
Я уже погуглил, и большинство ответов на результаты / SackOverflow, похоже, относятся к 2016/2017 годам, сосредоточенным на более старых версиях IntelliJ, у которых были проблемы с Junit 5, которые, похоже, не связаны.
Пожалуйста, какой-нибудь совет? Если мы потратим на это слишком много времени, он будет вынужден вернуться к 4, а я очень не хочу этого делать :)
В /src/test/java/package.name.long ... java - это то, что помечено как тестовые источники




Я почти уверен, что это связано с тем, что Spring Boot 2 не использует требуемую версию плагина Maven Surefire для JUnit 5. Попробуйте:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
Поддержка JUnit5 была добавлена в 2.22.0, см. https://issues.apache.org/jira/browse/SUREFIRE-1330
Это тоже не сработало, я только что протестировал. Что сработало - добавлены зависимости junit-jupiter-api и junit-jupiter-params
Вы действительно были близки - этот плагин необходим для запуска теста maven! Его не требуется запускать через IntelliJ, но он предназначен для тестирования maven, а также для работы Jenkins. Так что положительно оцениваю полезный ответ!
Итак, что работает для Junit 5 с Spring Boot 2, так это следующие 3 ВМЕСТЕ:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
Протестировано и проверено с пустым проектом.
Обратите внимание, что ответ @ Майкла Легарта предлагает добавить
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
Требуется для maven test (и Jenkins) для обнаружения и выполнения тестов!
Что сработало для меня.
Не используйте версию самостоятельно, добавьте junit-bom
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>5.6.1</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
Также с maven-surefire-plugin не добавляйте версию
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
</plugin>
</plugins>
</build>
В моем случае у меня был метод тестирования private - он должен быть public.
Используя IntelliJ, мне пришлось удалить целевую папку и запустить тесты, чтобы избавиться от этой ошибки.
Ваше решение ничего не добавляет к существующему принятому ответу, хотя я рад, что он сработал для вас.
Я знаю, что это старый вопрос, но, возможно, он кому-то поможет.
Я получил сообщение об ошибке, потому что я скопировал метод из рабочего файла, в котором метод был объявлен static.
Если вы пишете свои тесты в интерфейсах или абстрактных классах, например
public interface FooTests() {
@Test
default void fooTest() {
...
}
}
которые затем будут реализованы "настоящим" классом тестировщика,
public class Tester() implements FooTests, BarTests {
...
}
тогда может произойти то, что вы впервые выполнили один из этих тестов самостоятельно, в результате чего IntelliJ запомнил свою конфигурацию запуска после этого как FooTests::fooTest, когда на самом деле это должен быть Tester::fooTest. Вы можете переопределить это, изменив конфигурацию запуска теста, например
Вы хотите заменить класс Метод: своим неинтерфейсным, неабстрактным классом запуска тестов.
Где тестовый файл в структуре проекта?