我有两个类是同一接口的不同实现。还有一组相当大且复杂的单元测试来测试实现的正确性。
我正在寻找针对两个或更多类运行同一组测试的最佳方法。不幸的是,由于外部限制,我仅限于使用 JUnit4。所以花哨的新奇测试框架对我不起作用。
您能否建议您最喜欢的方法,而不是盲目地将测试复制到单独的文件中并导致保持两个文件同步的维护头痛。
澄清:两个类必须保持完全独立,目标是测试两个类对于完全相同的输入是否产生完全相同的输出。这些类被写入公共接口。所以问题是如何针对同一接口的两个不同实现运行相同的测试用例。
这个怎么样:
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.
您可以使用接收您的接口(和内部的测试方法)的构造函数创建基本测试类。并将一些接口实现传递给具体类super()。
如果没有共同的实现细节,那么你必须为每个实现有不同的单元测试。