Spring Boot Maven单元测试未执行

nr7wwzry  于 2022-09-18  发布在  Spring
关注(0)|答案(6)|浏览(717)

我有个Spring Boot项目。我已经在.../src/test/Java/中编写了单元测试...目录。我的所有单元测试都是*Test.java形式的。当我运行‘mvn test’时,我得到以下输出:

[INFO]  
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ frm-api ---  
[INFO] Changes detected - recompiling the module!  
[INFO] Compiling 6 source files to /Users/JoelRives/Projects/fasor/fasor-service/fatality-review/target/test-classes  
[INFO]  
[INFO] --- maven-surefire-plugin:2.22.0:test (default-test) @ frm-api ---  
[INFO]  
[INFO] -------------------------------------------------------  
[INFO]  T E S T S  
[INFO] -------------------------------------------------------  
[INFO]   
[INFO] Results:  
[INFO]  
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0  
[INFO]

显然,Maven在编译单元测试时会看到它们。然而,正如您所看到的,它并不运行它们。

我的POM中有以下相关的maven依赖项:

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      <version>1.5.3.RELEASE</version>
  </dependency>

  <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
      <scope>test</scope>
      <version>1.4.194</version>
  </dependency>

我的POM还包括以下插件:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.0</version>
            <dependencies>
                <dependency>
                    <groupId>org.junit.platform</groupId>
                    <artifactId>junit-platform-surefire-provider</artifactId>
                    <version>1.3.0-M1</version>
                </dependency>
                <dependency>
                <groupId>org.junit.jupiter</groupId>
                    <artifactId>junit-jupiter-engine</artifactId>
                    <version>5.2.0-M1</version>
                </dependency>
            </dependencies>
        </plugin>

在这方面的任何帮助都是非常感谢的。

我没有展示我的全部POM。以下是JUNIT的相关内容:

<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
  </dependency>

  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      <version>1.5.3.RELEASE</version>
  </dependency>

  <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
      <scope>test</scope>
      <version>1.4.194</version>
  </dependency>
u7up0aaq

u7up0aaq1#

看起来,如果你使用Junit4和Surefire插件2.22版及更高版本,测试就不会被接受。我遇到了类似的问题,使用Sure Fire V2.21.0似乎很管用。

下面是我的surefire配置

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.21.0</version>
            </plugin>
w46czmvw

w46czmvw2#

对我来说,这是我在pom.xml中写的,我使用的是JUnit4

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

一旦我移除exclusions,它就开始执行。

lbsnaicq

lbsnaicq3#

使用最新的Surefire,您可以将其配置为使用JUnit4:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.0.0-M5</version>
    <dependencies>
      <dependency>
        <groupId>org.apache.maven.surefire</groupId>
        <artifactId>surefire-junit47</artifactId>
        <version>3.0.0-M5</version>
      </dependency>
    </dependencies>
  </plugin>
s3fp2yjn

s3fp2yjn4#

请注意,这只是部分答案。我可以通过从POM中删除surefire插件来运行单元测试。在过去,我从来没有遇到过万无一失的问题。哦,好吧……,至少测试还在运行--尽管它们可能是坏的:-)我稍后将调查万无一失的问题。谢谢你的建议。

z31licg0

z31licg05#

尝试更新surefire-plugin以明确选择测试类,如下所示:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
            <includes>
                <include>**/*Test*.java</include>
            </includes>
        </configuration>
    </plugin>
</plugins>

你也可以查this,可能是重复的!!

v6ylcynt

v6ylcynt6#

这里的关键是理解Spring使用的测试引擎。

在我的例子中,我用@RunWith(SpringRunner.class)编写了API测试,它在JUnit4下,它与junit-vintage-engine一起运行。

但是单元测试是用JUnit5下的JUnit5编写的,JUnit5与junit-jupiter-engine一起运行。

SpringBoot的默认引擎是junit-jupiter-engine。所以我们必须告诉Spring,我们也想使用junit-vintage-engine

我们只需在pom.xml中添加依赖项:

<dependency>
  <groupId>org.junit.vintage</groupId>
  <artifactId>junit-vintage-engine</artifactId>
  <scope>test</scope>
</dependency>

或者,如果我们想使用maven-surefire,我们可以在插件中添加依赖项:

<plugin>
  <groupId>org.apache.maven.plugins</groupId> 
  <artifactId>maven-surefire-plugin</artifactId>
  <version>3.0.0-M7</version>
  <dependencies>
    <dependency>
      <groupId>org.junit.vintage</groupId>
      <artifactId>junit-vintage-engine</artifactId>
      <version>5.7.0</version>
    </dependency>
  </dependencies>
</plugin>

相关问题