2015-10-16 60 views
1

我可以(以及我认为更重要的是,我应该)在抽象类中包装泛型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 
} 
+1

是的。我建议你试试:) –

回答

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); 
    } 
} 
+0

啊有趣的 - 我没有想到这一点! – Hamish

0

是的,你应该这样做。它允许您重用您的抽象类,并自定义您的设置,同时也运行类似的测试。

0

一般来说,单元测试必须是更具体的关于你正在测试的东西。尽管你的方法可能没有错,但你从根本上违反了单元测试的原则。

试着单独测试你的缓存逻辑和使用缓存逻辑的功能。在测试功能时,理想情况下不需要重新测试缓存逻辑。