2015-10-16 25 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

一般來說,單元測試必須是更具體的關於你正在測試的東西。儘管你的方法可能沒有錯,但你從根本上違反了單元測試的原則。

試着單獨測試你的緩存邏輯和使用緩存邏輯的功能。在測試功能時,理想情況下不需要重新測試緩存邏輯。