2013-04-03 78 views
3

我有兩種邏輯測試類別:純粹的功能單元測試(通過/失敗)以及僅用於度量/診斷的基準測試。使用JUnit類別與簡單地在單獨的類中組織測試

目前,我有一個類中的所有測試方法,稱之爲MyTests

public class MyTests 
{ 
    @Test 
    public void testUnit1() 
    { 
     ... 

     assertTrue(someBool); 
    } 

    @Test 
    public void testUnit2() 
    { 
     ... 

     assertFalse(someBool); 
    } 

    @Test 
    @Category(PerformanceTest.class) 
    public void bmrkPerfTest1() 
    { 
     ... 
    } 

    @Test 
    @Category(PerformanceTest.class) 
    public void bmrkPerfTest2() 
    { 
     ... 
    } 
} 

然後,我有一個UnitTestSuite定義爲

@RunWith(Categories.class) 
@Categories.ExcludeCategory(PerformanceTest.class) 
@SuiteClasses({ MyTests.class }) 
public class UnitTestSuite {} 

PerformanceTestSuite

@RunWith(Categories.class) 
@Categories.IncludeCategory(PerformanceTest.class) 
@SuiteClasses({ MyTests.class }) 
public class PerformanceTestSuite {} 

,以便我可以在中運行單元測試與性能測試分開(我不認爲包括Ant代碼是必要的)。

這意味着我總共有四個類(MyTests,PerformanceTest,PerformanceTestSuite和UnitTestSuite)。我意識到我可以將所有的單元測試放在一個類中,並在另一個類中進行基準測試,並完成它,而不需要類別和額外註釋的額外複雜性。我在Ant中通過類名稱調用測試,即不要在包中運行所有測試。

它是否有意義,以及如何使用註解保持它按類別組織的原因是什麼?或者如果我只是在兩個簡單的測試類中重構它,它會更好嗎?

回答

5

爲了是否要在兩類測試分裂的問題:

因爲他們顯然非常不同類型的測試(單元測試和性能測試),我會把他們在不同的班級在任何情況下,僅此而已。

一些進一步的沉思:

我不認爲使用@Category註解然而,一個壞主意。我會做一個更典型的項目,其中包含數十個或數百個包含測試的類,它將註釋(而不是方法)與@Category,然後use the ClassPathSuite library,以避免重複分類測試的努力。 (也許run the tests by category using Ant。)

如果你只會有兩個測試類,它當然沒有多大關係。如果您有額外的類錯誤,您可以保留類別和套件,或者丟棄它們(正如您所說的,測試是通過Ant中的類名運行的)。我會保留它們,並按照上面描述的情況,通常(在一個健康的項目中)隨着時間的推移,越來越多的測試會累積起來。 :-)

1

如果你只有兩個測試類,那麼它可能沒有關係。我工作的項目有50-60個班。按名稱列出它們會讓人筋疲力盡。你可以使用文件名模式,但我覺得註釋更清晰。