【问题标题】:Maven run unit tests without integration tests, and integration tests without unit testsMaven 在没有集成测试的情况下运行单元测试,在没有单元测试的情况下运行集成测试
【发布时间】:2023-01-09 18:05:41
【问题描述】:

我有结构:

 - test
   - java
       - com
          - A
             - service
                 - serviceB
                    - DefaultServiceBTest.java
                    - integration
                          - DefaultServiceBIntegrationTest.java

我想单独运行单元测试和集成测试。我正在使用 maven surefire 和 failsafe 插件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${maven.surefire.plugin.version}</version>
    <configuration>
        <trimStackTrace>false</trimStackTrace>
        <printSummary>true</printSummary>
        <excludes>
            <exclude>integration/*.java</exclude>
        </excludes>
    </configuration>
</plugin>

由于 mvn test 默认运行 surefire:test 具有此配置 maven-surefire 工作,并且使用 mvn test 仅运行单元测试 - 在我的情况下所有测试不在 integration 文件夹中。

但是对于故障安全我有这个配置:

<plugin>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>${maven.failsafe.plugin.version}</version>
    <configuration>
        <includes>
            <include>**/integration/*.java</include>
        </includes>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
</plugin>

针对maven-failsafe 进行此配置并运行mvn verify -Pfailsafe 会导致首先运行单元测试,然后运行集成测试。但是我不希望用这个来执行单元测试。配置有什么问题?

感谢帮助!

【问题讨论】:

    标签: java maven


    【解决方案1】:

    首先,您不应该使用不同的目录将单元测试与集成测试分开。使用现有的命名约定。单元测试*Test.java和集成测试*IT.java...

    使用以下configuration in your POM File

    <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/maven-v4_0_0.xsd">
    
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.soebes.youtube.maven.episodes</groupId>
      <artifactId>example-episode-2</artifactId>
      <version>1.0-SNAPSHOT</version>
    
      <name>Episode 2: Unit- and/or Integration Testing</name>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.release>17</maven.compiler.release>
      </properties>
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>org.junit</groupId>
            <artifactId>junit-bom</artifactId>
            <version>5.9.1</version>
            <scope>import</scope>
            <type>pom</type>
          </dependency>
          <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>3.23.1</version>
          </dependency>
        </dependencies>
      </dependencyManagement>
    
      <dependencies>
        <dependency>
          <groupId>org.junit.jupiter</groupId>
          <artifactId>junit-jupiter-api</artifactId>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.junit.jupiter</groupId>
          <artifactId>junit-jupiter-params</artifactId>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.assertj</groupId>
          <artifactId>assertj-core</artifactId>
          <scope>test</scope>
        </dependency>
      </dependencies>
    
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-clean-plugin</artifactId>
              <version>3.2.0</version>
            </plugin>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-resources-plugin</artifactId>
              <version>3.3.0</version>
            </plugin>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-jar-plugin</artifactId>
              <version>3.3.0</version>
            </plugin>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.10.1</version>
            </plugin>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>3.0.0-M8</version>
              <configuration>
                <skipTests>${skipUTs}</skipTests>
              </configuration>
            </plugin>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-failsafe-plugin</artifactId>
              <version>3.0.0-M8</version>
              <configuration>
                <skipTests>${skipITs}</skipTests>
              </configuration>
            </plugin>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-install-plugin</artifactId>
              <version>3.1.0</version>
            </plugin>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-deploy-plugin</artifactId>
              <version>3.0.0</version>
            </plugin>
          </plugins>
        </pluginManagement>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <executions>
              <execution>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </project>
    

    通过使用它,您可以通过以下方式运行单元测试:

    mvn test
    

    您可以通过以下方式运行单元测试和集成测试:

    mvn verify
    

    如果您只想运行集成测试:

    mvn verify -DskipUTs
    

    详细的解释可以查看下面的YT video

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-28
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      相关资源
      最近更新 更多