Maven:如何在第三个模块中使用相同的测试来测试两个模块

时间:2010-02-25 14:28:35

标签: java unit-testing maven-2

想象一个maven项目,每个模块包含3个模块,一个接口模块和两个不同的接口实现。 我可以在自己的模块中测试每个实现,但由于相同的接口,测试用例基本相同。

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

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

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

谢谢。

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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包含适当实现的依赖性。所有依赖项当然都要用于测试。

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

答案 2 :(得分:1)

我没有使用maven模块执行此操作,但it should be simple如果您实现了抽象测试用例ala

public abstract class XyTester {

  protected abstract YourInterface createImpl();
}

junit必须让抽象类不以“Test”结尾,所以选择Tester。

请参阅此处了解abstract class in real worldherehere的实施方法。