2013-04-03 47 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个班。按名称列出它们会让人筋疲力尽。你可以使用文件名模式,但我觉得注释更清晰。