想象一个maven项目,每个模块包含3个模块,一个接口模块和两个不同的接口实现。 我可以在自己的模块中测试每个实现,但由于相同的接口,测试用例基本相同。
有没有办法在第四个maven模块中收集测试用例并用这个模块测试这两个实现?
parent
|-interface
|-impl a
|-impl b
|-tests
因此,如果我构建impl a,maven知道从测试模块运行测试以反对构建。
谢谢。
答案 0 :(得分:5)
关于Java:
如何在测试模块中创建abstract
测试,您将在其中编写主要测试用例。此测试将使用测试中第一个模块中定义的接口。
然后,在每个模块impl a
和impl 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 world和here或here的实施方法。