我正在启动一个项目,其中“核心”模块将定义一组公共接口,而其他模块使用后端的不同库来实现这些接口。它与SLF4J非常相似,其中API模块描述了您可以使用的所有操作,绑定模块在各种日志框架(如Log4j,java.util日志记录和Logback)中实现这些操作。要使用它,您需要依赖API模块和其中一个绑定模块,并且只能与API进行交互。
我的问题在于测试。由于API表示所有可能的操作,并且每个绑定模块应该以相同的方式运行,因此我想编写一组描述预期行为的测试,并针对每个绑定模块运行相同的测试。如何在不经过多次努力的情况下组织工作以使其发挥作用?
这是一个包含大量Groovy的Java项目,我打算用Gradle构建它。
答案 0 :(得分:1)
我以前用JUnit做过这种事情。我所做的是用所有逻辑定义一组抽象测试类:
public abstract AbstractTestBase {
protected abstract CommonInterface getInstance(); //for subclasses to implement
@Test
public void testSomething() {
CommonInterface instance = getInstance();
//test instance
}
}
然后具体的子类通常只是很小的类,它们返回要测试的具体实现:
public class TestSomeImplementation extends AbstractTestBase {
protected CommonInterface getInstance() {
return new SomeImplementation();
}
}
在一些我已经为特定实现添加了特定的测试,但在你的情况下,我知道你不需要。
答案 1 :(得分:1)
这取决于绑定机制。如果多个绑定可以共存,则可以通过编写针对每个绑定运行相同测试类/方法的数据驱动测试来解决测试级别上的问题。 (有关如何实现此目的的详细信息取决于使用的测试框架。)如果绑定不能共存,则可以在构建级别上解决问题。例如,您可以创建10个Test
任务,除了类路径上的实现Jar之外,这些任务的配置相同。