假设我已经在maven
中创建了一个模块化项目,该项目在api
中定义了myproject-api
接口,并且在myproject-impl
和{{ 1}}。
myproject-impl2
我想创建一个单一的测试套件,可以针对这两种实现进行测试。当然,将来,我可以添加另一个实现,我也想使用该通用测试工具包对其进行测试。
用junit实现这种共享测试的最佳实践是什么?
接口示例(在myproject-api
myproject-impl
myproject-impl2
中):
myproject-api
实施:
public interface SmallLettersSource {
String read();
}
中:myproject-impl
class ASource implements SmallLettersSource {
@Override
public String read() {
return "a";
}
}
中:myproject-impl2
进行测试(我也想将其添加到class BSource implements SmallLettersSource {
@Override
public String read() {
return "b";
}
}
中):
myproject-api
答案 0 :(得分:3)
我想出了以下解决方案:
myproject-api
中,创建了类CommonTestSuite
,该类返回了DynamicTest
对象的列表:
public class CommonTestSuite {
private final Source source;
public CommonTestSuite(Source source) {
this.source = source;
}
public Collection<DynamicTest> tests() {
return Arrays.asList(
dynamicTest("Should return only lowercase.", this::testLowercase),
dynamicTest("Should return only one letter.", this::testLength)
);
}
void testLowercase() {
assert(source.read().equals(source.read().toLowerCase()));
}
void testLength() {
assert(source.read().size() == 1);
}
}
class MyProjectImplTest {
@TestFactory
Collection<DynamicTest> test() {
return new CommonTestSuite(new ASource()).tests();
}
}
,对于其他模块,我需要进行类似的设置。这样,我可以在各个模块之间共享通用测试。