考虑以下具体方案:有人创建了许多测试,这些测试完全测试了实现Collection<E>
的类必须遵守的功能。那么如何使用该测试类(以某种方式)来测试Collection<E>
的具体实现?
以示例:
public class CollectionTest {
//lots of tests here
}
public class ACollection<E> implements Collection<E> {
//implementation and custom methods
}
public class BCollection<E> implements Collection<E> {
//implementation and other custom methods
}
我应该如何编写测试类,以便最少发生代码重复?
public class ACollectionTest {
//tests for Collection<E>, preferably not duplicated
//tests for custom methods
}
public class BCollectionTest {
//tests for Collection<E>, preferably not duplicated
//tests for other custom methods
}
换句话说,是否可以扩展CollectionTest&#34;,但是在ACollectionTest
或BCollectionTest
(或更多)的实例上运行测试?请注意,例如,将ACollection<E>
用作Collection<E>
后,仍然可以访问这些方法。
答案 0 :(得分:4)
在基类中:
protected Collection<Foo> collectionUnderTest;
@Test
public void shouldDoThis() {
// uses collectionUnderTest
}
@Test
public void shouldDoThat() {
// uses collectionUnderTest
}
在子类中,特定于ACollection实现:
@Before
public void prepare() {
this.collectionUnderTest = new ACollection<>();
}