【问题标题】:Maven: How to test two modules with the same tests in a third moduleMaven:如何在第三个模块中使用相同的测试测试两个模块
【发布时间】:2010-02-25 14:28:34
【问题描述】:

想象一个 maven 项目,它有 3 个模块、一个接口模块和一个模块中该接口的两个不同实现。 我可以在自己的模块中测试每个实现,但测试用例基本相同,因为接口相同。

有没有办法在第四个 maven 模块中收集测试用例并用这个模块测试两个实现?

parent
|-interface
|-impl a
|-impl b
|-tests

因此,如果我构建 impl a,maven 知道从测试模块针对 impl a 构建运行测试。

谢谢。

【问题讨论】:

  • 你试过了吗?我没有看到任何障碍,一切似乎都很好

标签: java unit-testing maven-2


【解决方案1】:

关于 Java:

如何在测试模块中创建一个abstract 测试,您将在其中编写主要测试用例。该测试将使用测试中第一个模块中定义的接口。

然后,在每个模块 impl aimpl b 中,创建一个扩展 abstract 测试的测试并调用在 tests 模块中定义的测试方法。

关于 Maven:

tests 模块中,您必须向 Maven 表明他必须创建一个 jar 的测试包:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.3</version>
            <executions>
                <execution>
                    <goals>
                        <goal>test-jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

然后,在每个实现模块中,您必须表明您对这个 test-jar 库有依赖关系:

    <dependency>
        <groupId>foo</groupId>
        <artifactId>bar</artifactId>
        <version>${pom.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
    </dependency>

【讨论】:

  • 你,先生,是个老板。大赞这个:)
【解决方案2】:

是的,我们已经为类似的场景这样做了。您只需在测试模块中创建两个 pom,每个实现一个。假设你有一个 maven pom 用于构建父模块中的所有内容,它现在将包含类似

的模块
<module>../interface</module>
<module>../impl_a</module>
<module>../impl_b</module>
<module>../tests/impl_a</module>
<module>../tests/impl_b</module>

每个测试 pom 都包含适当实现的依赖项。当然,所有依赖项都在测试范围内。

现在对 parent/pom.xml 运行 mvn 将构建所有项目并运行两次相同的测试,并具有适当的依赖项。然后测试项目将在每个 impl_? 下创建一个目标目录。子目录。

【讨论】:

    【解决方案3】:

    我没有用 maven 模块做这个,但是it should be simple 如果你实现了一个抽象的测试用例ala

    public abstract class XyTester {
    
      protected abstract YourInterface createImpl();
    }
    

    junit需要让抽象类不以“Test”结尾,所以我选择Tester。

    请参阅此处了解abstract class in real worldherehere 了解其实现之一。

    【讨论】:

      猜你喜欢
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多