繁体   English   中英

Spring 引导 maven 单元测试未执行

[英]Spring Boot maven unit tests not being executed

我有一个 Spring 引导项目。 我已经在 .../src/test/java/... 目录中编写了单元测试。 我所有的单元测试都采用 *Test.java 的形式。 当我运行“mvn test”时,我得到以下 output:

[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>

对我来说,我在我的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 ,它就会开始执行。

看起来如果您使用的是 Junit4 和 surefire 插件版本 2.22 及更高版本,则不会进行测试。 我有一个类似的问题,使用 surefire V2.21.0 似乎有效。

下面是我的万无一失的配置

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

尝试更新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>

你也可以看看这个,可能是重复的!!

请注意,这是部分答案。 我可以通过从 POM 中删除 surefire 插件来运行单元测试。 过去我从来没有遇到过surefire的问题。 好吧...,至少测试正在运行 - 可能已损坏:-) 我稍后会调查万无一失的问题。 感谢您的建议。

使用最近的万无一失,您可以将其配置为使用 JUnit 4:

  <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>

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

就我而言,我使用@RunWith(SpringRunner.class)编写了 API 测试,该测试位于 JUnit4 下,与junit-vintage-engine一起运行。

但是单元测试是用 JUnit Jupiter 编码的,它在 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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM