如何在具有不同依赖关系的模块之间重复一组测试?

时间:2013-03-15 03:50:26

标签: java testing gradle

我正在启动一个项目,其中“核心”模块将定义一组公共接口,而其他模块使用后端的不同库来实现这些接口。它与SLF4J非常相似,其中API模块描述了您可以使用的所有操作,绑定模块在各种日志框架(如Log4j,java.util日志记录和Logback)中实现这些操作。要使用它,您需要依赖API模块和其中一个绑定模块,并且只能与API进行交互。

我的问题在于测试。由于API表示所有可能的操作,并且每个绑定模块应该以相同的方式运行,因此我想编写一组描述预期行为的测试,并针对每个绑定模块运行相同的测试。如何在不经过多次努力的情况下组织工作以使其发挥作用?

这是一个包含大量Groovy的Java项目,我打算用Gradle构建它。

2 个答案:

答案 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之外,这些任务的配置相同。