Python中文网

一个关于 编程问题的解答网站.

有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

一些项目的java排除测试

对不起,我是Java新手,我想知道如何避免依赖项项目的测试执行

我有一个Proj3,它有两个依赖项,Proj1和Proj2(除其他外)

如果执行mvn clean install,则不仅要执行当前项目J3的测试,还要执行依赖项项目J1和项目J2的测试

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.proj.environment.tests.api</groupId>
<artifactId>environment_Api_Tests</artifactId>
<version>437r21</version>
<packaging>pom</packaging>

<properties>
    <cucumber.version>4.3.1</cucumber.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.version>437r21</project.version>
</properties>

<dependencies>
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>${cucumber.version}</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>${cucumber.version}</version>
        <scope>test</scope>
    </dependency>

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

    <dependency>
        <groupId>com.proj.environment</groupId>
        <artifactId>Proj1</artifactId>
        <version>${project.version}</version>

    </dependency>

    <dependency>
        <groupId>com.proj.environment</groupId>
        <artifactId>Proj2</artifactId>
        <version>${project.version}</version>

    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <encoding>UTF-8</encoding>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.18.1</version>
            <configuration>
                <testFailureIgnore>true</testFailureIgnore>
                <includes>
                    <exclude>**/*Test.java</exclude>
                </includes>
            </configuration>
        </plugin>
    </plugins>
</build>

<modules>
    <module>../Proj1</module>
    <module>../Proj2</module>        
</modules>

非常感谢,


共 (1) 个答案

  1. # 1 楼答案

    您显示的POM是针对environment_Api_Tests项目的,该项目是aggregation (parent) project。这意味着

    ... if a Maven command is invoked against the parent project, that Maven command will then be executed to the parent's modules as well.

    因此,你的具体情况并不十分清楚。 根据它与您提到的Proj3的关系,有不同的答案:

    如果environment_Api_Tests项目(你发布的POM)是你所说的Proj3

    对其模块执行命令(不要将其与依赖项混淆)是完全正常的,从模块中排除测试是毫无意义的。此外,您不能在聚合(父)项目本身中进行测试。因此,如果您只想执行一些模块,那么最好引入另一个只包含这些模块的聚合项目。您可以进一步聚合项目

    这里的<dependencies>与此无关。在聚合项目中,section所做的唯一一件事就是为所有<modules>提供依赖项。在你的情况下,这意味着:

    • Proj1依赖于Proj1Proj2
    • Proj2依赖于Proj1Proj2

    这可能不是你想要的

    如果有另一个Proj3也是environment_Api_Tests

    然后你只需要对该项目执行测试,而不是对environment_Api_Tests。即使Proj3依赖于Proj1Proj2,它们的测试也不会执行

    如果Proj3environment_Api_Tests,但它不是一个聚合项目

    然后您需要将包装从pom更改为jar(或任何您的目标),并移除<modules>,但保留<dependencies>。这样,项目可以有自己的测试,而不会执行依赖性测试

    关于测试相关性的注释

    需要记住的一件事是测试依赖关系如何在多模块项目中工作。如果一个模块中的测试依赖于另一个模块中的测试,则必须create a jar containing test classes