메이븐에서 Spring Boot 테스트를 실행하지 않음
테스트하고 싶은 rest Spring Boot REST API가 있습니다.Eclipse에서 수동으로 테스트를 실행할 수 있으며(메이븐 없이 애플리케이션을 Junit 테스트로 실행하여) 정상적으로 실행되고 결과가 표시되지만,mvn test
는 아래에서 확인할 수 있듯이 "작동"하지 않습니다.
다음은 제 POM 파일입니다.
http://maven.apache.org/xsd/maven-4.0.0.xsd "> 4.0.0
<groupId>org.demo</groupId>
<artifactId>rest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>UserRegistrationServices</name>
<description>RESTful API</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.5.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- Junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- Spring dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- To deploy to external servlet container -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- For Spring Boot testing -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jayway.restassured</groupId>
<artifactId>rest-assured</artifactId>
<version>2.4.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jayway.restassured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>2.4.1</version>
<scope>test</scope>
</dependency>
<!-- For returning objects as JSON -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.4</version><!--$NO-MVN-MAN-VER$ -->
</dependency>
<dependency>
<groupId>com.fasterxml</groupId>
<artifactId>jackson-xml-databind</artifactId>
<version>0.6.2</version>
</dependency>
<!-- To decode Base64 data -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
</dependencies>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<url>http://repo.spring.io/snapshot</url>
</pluginRepository>
</pluginRepositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
이것은 의 결과입니다.mvn test
:
[INFO] Scanning for projects...
[INFO]
[INFO] Using the builder org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder with a thread count of 1
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building UserRegistrationServices 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ rest ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ rest ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 9 source files to C:\Users\pmandayam\git\UserRegistrationServices\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ rest ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\pmandayam\git\UserRegistrationServices\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ rest ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to C:\Users\pmandayam\git\UserRegistrationServices\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.17:test (default-test) @ rest ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.768 s
[INFO] Finished at: 2015-07-28T12:07:41-05:00
[INFO] Final Memory: 24M/212M
[INFO] ------------------------------------------------------------------------
다음은 src/test/java의 TestController.java 클래스의 세그먼트입니다.
@Test
public void f_findByUsername() {
// Finding user with username 'user1username'
given().auth().basic("User1username", "Testpassword").when().get(
"http://localhost:8080/users/get/ByUsername?username=User1username")
.then().assertThat().body("username", is("User1username"));
}
테스트 컨트롤러 클래스의 맨 위에는 다음과 같은 주석이 있습니다.
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
/* Tells the embedded Tomcat server to start on a random, open port */
@IntegrationTest("server.port:0")
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestController {....}
뭐가 문제인지 잘 모르겠어요.저는 surefire 플러그인을 가지고 있지 않지만 찾고 있는 것 같습니다.
이름을 지정한 클래스의 코드TestController
컨트롤러가 아니라 테스트입니다. 하지만 관례에 따르면 컨트롤러(테스트에 주로 사용됨)라고 합니다.기본적으로 Surefire는 일치하는 테스트를 찾습니다.*Test
클래스 이름을 로 변경ControllerTest
.
아래의 메이븐 병을 사용합니다.그것이 제 문제를 해결했습니다.
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
</dependency>
@Test 주석에 올바른 패키지를 사용하고 있는지 확인해 보십시오.In Spring Boot 2.3.6은org.junit.jupiter.api.Test
표준이 아닌 경우에도 다음과 같이 Maven surefire 플러그인을 구성할 수 있습니다.
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*Test*.java</include>
</includes>
</configuration>
</plugin>
</plugins>
편집: /Test*java 앞에 와일드카드가 추가되었습니다.
이 질문이 검색 엔진에서 먼저 채워지기 때문에, 저는 그것이 인터넷으로 연결된 행동에 대한 해결책을 찾는 사람들에게 도움이 될 것이라고 생각했습니다.SpringBoot
버전부터2.4
앞으로
문제 - SpringBoot 프로젝트를 이전 버전에서 최신 버전으로 마이그레이션하는 경우2.5.x
그렇다면 기존의junit
테스트 사례가 무시됨maven
.
이유 - SpringBoot가 다음으로 마이그레이션되었습니다.junit5
그래서 메이븐이 무시하고 있는 겁니다junit4
시험 사례자세한 테스트 종속성을 보려면 다음에 대한 폼을 탐색합니다.spring-boot-starter-test
.
솔루션 1 - 테스트 사례를 다음에 기록합니다.junit5
클래스 수준 주석 포함@SpringBootTest
그리고 그 뒤를 따릅니다.Junit5
규칙.
솔루션 2 - 또는 다음을 사용할 수 있습니다.junit-vintage
두 가지를 모두 실행하기 위한 프로젝트의 종속성junit4
그리고.junit5
사건을 함께 검사하다
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>5.6.3</version>
<scope>test</scope>
</dependency>
이런 일이 일어날 수 있는 또 다른 이유는 당신의 폼에 또 다른 확실한 플러그인을 선언했기 때문입니다.저의 경우, 저는 앱을 스프링 부트로 마이그레이션하고 이것을 폼에 남겼습니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>false</testFailureIgnore>
<includes>
<include>**/*Test*.java</include>
</includes>
</configuration>
<executions>
<execution>
<phase>clean</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>
스프링 부트 테스트는 폼에서 이 부분을 제거한 후 실행되었습니다.
위에서 설명한 내용 중 어느 것도 제대로 작동하지 않고 적절한 주석이 있는 junit 5를 사용하는 경우 Maven Surefire 및 Failsafe 플러그인에 문제가 있을 수 있습니다.이는 Surefire 2.22.0 플러그인 릴리스의 Junit Surefire 제공자와 Junit 지원 간에 충돌이 있기 때문입니다.
Maven Surefire 및 Failsafe 플러그인의 2.22.0 릴리스를 요구하도록 POM을 업데이트합니다.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.22.0</version>
</plugin>
</plugins>
</build>
예를 보려면 여기를 참조하십시오.
org.junit을 추가하는 중입니다.주피터.api시험은 나에게 효과가 있었습니다.
Spring boot 2.5.0 junit-vintage-engine jar는 추가되지 않으므로 org.junit이 없습니다.테스트가 실행되지 않습니다.
오직 오르간. 주니트만.주피터.api테스트가 실행되는 것 같습니다.
이 병(junit-vintage-engine)을 추가한 후 이전 테스트(org.junit)를 모두 추가했습니다.테스트)가 완전히 정상적으로 실행됩니다.
이 문제는 테스트 클래스가 공개되지 않았기 때문에 발생할 수 있습니다.
이것은 스프링부트 2.3.9를 2.4.3으로 업데이트하는 문제에 효과가 있습니다.
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>5.6.3</version>
<scope>test</scope>
</dependency>
스프링 부트 3과 관련하여 이 문제가 발생할 경우, 저는 제 surefire 플러그인 버전을 3.0.0-M8로 업그레이드해야 했습니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M8</version>
</plugin>
TestController - 파일 이름은 Test.java로 끝나야 합니다.
여전히 문제가 있는 다른 사람들을 위한 것입니다.개인적으로 저는 다음을 제거함으로써 이 문제를 해결했습니다.
<packaging>pom</packaging>
pom.xml 파일에서.
언급URL : https://stackoverflow.com/questions/31681855/maven-not-running-spring-boot-tests
'programing' 카테고리의 다른 글
C#이 있는 압축/압축 해제 문자열 (0) | 2023.08.26 |
---|---|
PIL로 문자열에 PNG 이미지를 쓰는 방법은 무엇입니까? (0) | 2023.08.26 |
FFMPEG 라이브러리를 사용하여 RTSP 스트림 수신 (0) | 2023.08.26 |
어떻게 하면 1000개의 숫자로 구성된 두 집합을 서로 비교할 수 있습니까? (0) | 2023.08.21 |
PHP는 cron 작업에서 실행되는지 명령줄에서 실행되는지 탐지할 수 있습니까? (0) | 2023.08.21 |