【发布时间】:2012-06-22 13:23:11
【问题描述】:
我正在尝试为一些广泛使用的接口编写契约测试:
大致如下:
public abstract class MyInterfaceContractTest extends TestCase {
private MyInterface _toTest;
public void setUp(){
_toTest = getTestableImplementation();
}
protected abstract MyInterface getTestableImplementation();
public void testContract(){
}
}
...和...
public class MyInterfaceImplementationTest extends MyInterfaceContractTest {
protected MyInterface getTestableImplementation(){
return new MyInterfaceImplementation(...);
}
}
但是,我希望能够测试MyInterfaceImplementation 的多个实例。在我的用例中,这是一个包含数据集合的不可变对象(根据接口MyInterface 指定访问器),它可能是空的,或者有少量数据,甚至是大量数据。
所以问题是,我如何测试我的实现的多个实例?
目前,我必须初始化实现以将其传递给抽象合约测试。一种方法是为每个实现设置多个测试类,其中每个测试类测试该实现的一个特定实例 - 但这似乎有点庞大且难以跟踪。
FWIW,我正在使用 JUnit 3。
【问题讨论】:
-
JUnit 3 是古老的。为什么不使用 JUnit 4?
-
@DonRoby - 这对解决我的问题会有影响吗?我正在使用 JUnit 3,因为这是我们当前编写的单元测试的内容,升级到 JUnit 4 从来都不是优先事项。
-
如果我理解正确,您可以根据要求使用工厂来创建您的测试实施实例。我认为还有其他一些方法可以解决这个问题。
标签: java unit-testing interface junit