programing

메이븐에서 Spring Boot 테스트를 실행하지 않음

powerit 2023. 8. 26. 12:23
반응형

메이븐에서 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

반응형