在两个不同的类上运行相同测试集的最佳解决方案

时间:2013-03-13 23:10:15

标签: java junit

我有两个类,它们是同一个接口的不同实现。 还有一组相当大且复杂的单元测试来测试实现的正确性。

我正在寻找针对两个或更多类运行相同测试集的最佳方法。不幸的是,由于外部限制,我只能使用JUnit4。因此,花哨的新奇测试框架对我来说不起作用。

你可以建议你最喜欢这样做的方法,而不是盲目地将测试复制到单独的文件中,并导致保持两个文件同步的维护麻烦。

澄清:这两个类必须完全独立,目标是测试两个类对完全相同的输入产生完全相同的输出。这些类被写入公共接口。因此,如何针对同一接口的两个不同实现运行相同的测试用例是一个问题。

3 个答案:

答案 0 :(得分:3)

这个怎么样:

public abstract class TestBase {
    private TheInterface unitToTest;

    protected abstract TheInterface getInterfaceImplementation();

    @Before
    public void setImplementation() {
         unitToTest = getInterfaceImplementation();
    }

    @Test
    public void test1 {
         //excercise and assert unitToTest
    }
}

public class ImplementationOneTest extends TestBase {
    protected TheInterface getInterfaceImplementation() {
        return new ImplementationOne();
    }
}

public class ImplementationTwoTest extends TestBase {
    protected TheInterface getInterfaceImplementation() {
        return new ImplementationTwo();
    }
}

etc.

答案 1 :(得分:0)

您可以创建基础测试类,其中构造函数接收您的接口(以及内部的测试方法)。以及每个将一些接口实现传递给super()的具体类。

答案 2 :(得分:0)

  1. 将常见实现重构为单个类(base或 代表)。
  2. 重复使用当前单元测试来测试重构的公共 实施
  3. 提供实施不同的具体测试。
  4. 如果没有通用的实现细节,那么每个实现都必须有不同的单元测试。