0

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

我的问题在于测试。由于 API 表达了所有可能的操作并且每个绑定模块都应该以相同的方式运行,因此我想编写一组描述预期行为的测试并对每个绑定模块运行相同的测试。我应该如何组织事情以使其在没有大量重复努力的情况下发挥作用?

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

4

2 回答 2

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();
    }
}

在一些我已经为特定实现添加了特定测试,但在你的情况下,我知道你不需要。

于 2013-03-15T04:06:05.130 回答
1

这取决于绑定机制。如果多个绑定可以共存,您可以通过编写一个数据驱动的测试来解决测试级别的问题,该测试为每个绑定运行相同的测试类/方法。(如何实现这一点的细节取决于使用的测试框架。)如果绑定不能共存,您可以在构建级别解决问题。例如,您可以创建十个Test任务,这些任务的配置相同,但其类路径上的实现 Jar 除外。

于 2013-03-17T12:13:21.377 回答