2010-02-17 16 views
0

我有一個接口「A」的抽象測試用例「AbstractATest」。它有幾個試驗方法(@Test)和一個抽象方法:如何在JUnit中拆分抽象測試用例?

protected abstract A unit(); 

其下測試提供的單元。不,我有多個「A」的實現,例如「DefaultA」,「ConcurrentA」等。

我的問題: 這個測試用例很龐大(〜1500 loc),並且正在增長。所以我想把它分成多個測試用例。如何在Junit 4中組織/構建這些數據,而無需爲每個實現和抽象測試用例都創建具體的測試用例。

我想要「AInitializeTest」,「AExectueTest」和「AStopTest」。每個都是抽象的,包含多個測試。但對於具體的「ConcurrentA」,我只想要一個具體的測試用例「ConcurrentATest」。

我希望我的「問題」很清楚。

編輯
看起來像我的描述是不是明確
是否可以將參考傳遞給測試?
我知道參數化測試,但這些需要靜態方法,這不適用於我的設置。抽象測試用例的子類決定參數。

回答

0

爲什麼不讓每個具體的測試用例都通過一個叫做@Before的方法來初始化一個具體的測試用例。即您在初始化之前的具體實例的新實例到每個測試。然後抽象測試類可以提供測試工作(通過抽象類中的受保護字段引用)。

因此,每個具體實例都會有一個測試類,而這些測試類只是提供一個新的實例來測試。這些派生自的抽象測試類提供了所有的測試。當你創建一個新的具體類型時,你只需要一個新的具體測試類來實例化該類的一個實例。

+0

這就是你我用「一個」抽象測試用例做的。但是,我怎麼能把這個邏輯分解成多個類,由一個抽象測試用例來管理。 – whiskeysierra 2010-02-17 22:25:48

0

您可以爲測試方法引入一個參數,並使用一個@DataProvider創建要測試的所有類的實例。好的,全部在一個測試中。

+0

但是,我的具體實現(當然)分散在幾個程序包/模塊/項目當然不知道彼此。 – whiskeysierra 2010-02-17 22:33:20

+0

哈,我可以看看 - 坐在你身邊2,3公里;-) – 2010-02-18 11:53:17

0

我不知道你是否已經解決了這個問題,但是我建議你保留一個抽象測試,但是將抽象類中的方法的實現外化。

例如,創建一個類的初始化測試

public class InitializeTester { 
    protected static void testInitializeA(A unit) { 
     ... 
       assertSomething ... 
    } 

    protected static void testInitializeB(A unit) { 
     ... 
       assertSomething ... 
    } 

} 

A類與執行測試:

public class ExecuteTester { 
    protected static void testExecuteA(A unit) { 
     ... 
       assertSomething ... 
    } 

    protected static void testExecuteB(A unit) { 
     ... 
       assertSomething ... 
    } 

} 

然後實際的抽象測試儀:

public abstract class ATester { 
    @Test 
    public void testInitializA() { 
     InitializeTester.testInitializeA(unit()); 
    } 

    @Test 
    public void testInitializB() { 
     InitializeTester.testInitializeB(unit()); 
    } 

    @Test 
    public void testExecuteA() { 
     testExecuteTester.testExecuteA(unit()); 
    } 

    @Test 
    public void testExecuteB() { 
     testExecuteTester.testExecuteB(unit()); 
    } 

    abstract protected A unit(); 
} 

您可能最終抽象測試課程有很多方法,但是他們都會很短,因爲他們通過s控制到您的測試程序類。

+0

有趣的想法,但不得不爲每個測試方法添加一個方法給ATester是很多樣板代碼,並且很可能在添加時被遺忘新的測試案例。 – whiskeysierra 2010-03-09 23:00:27