我可以(我想我更重要的是,我应该)在抽象类中包装通用的junit测试吗?
例如,我有一组正在测试的类都使用缓存 - 显然最好在那里进行测试以确保我实际上正确地缓存了东西...这个测试代码几乎是每个类都相同,但有一些关于缓存对象创建的细节。
这样做可以吗?
abstract class Foo {
Baz baz;
@Before
abstract void setUp();
@Test
public void testMyBaz() {
// ...
}
}
public class Bar extends Foo {
void setUp() {
// set my baz
}
// other, more specific tests
}
答案 0 :(得分:3)
这样做是可以的,但在大多数情况下,当你需要它时,你只需要数据工厂,在JUnit中它就是这样做的:
@RunWith(Parametrized.class)
public class SumTest {
@Parameters
public static Iterable<Object[]> data() {
return Arrays.asList(new Object[][] {{1, 2, 3}, {3, 4, 7}});
}
private int a, b, sum;
public SumTest(int a, int b, int sum) {
this.a = a;
this.b = b;
this.sum = sum;
}
@Test
public void testSum() {
Assert.assertEquals(a + b, sum);
}
}
答案 1 :(得分:0)
是的,你应该这样做。它允许您重用您的抽象类,并自定义您的设置,同时还运行类似的测试。
答案 2 :(得分:0)
一般而言,单元测试需要更具体地了解您正在测试的内容。虽然你的方法可能没有任何问题,但你从根本上违反了单元测试的原则。
尝试独立使用缓存逻辑独立测试缓存逻辑和功能。在测试功能时,理想情况下无需重新测试缓存逻辑。