使用JUnit类别与简单地在单独的类中组织测试

时间:2013-04-03 00:10:36

标签: java junit junit4 categories

我有两个逻辑类别的测试:简单的功能单元测试(通过/失败)和基准性能测试,仅用于指标/诊断。

目前,我在一个班级中拥有所有测试方法,称之为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中单独执行单元测试与性能测试(我认为不需要包含Ant代码)。

这意味着我总共有四个类(MyTests,PerformanceTest,PerformanceTestSuite和UnitTestSuite)。我意识到我可以将所有单元测试放在一个类中,并在另一个类中进行基准测试并完成它,而不会增加类别和额外注释的复杂性。我在Ant中调用类名测试,即不在包中运行所有测试。

是否有意义以及使用注释按类别对其进行组织的原因是什么?如果我只是在两个简单的测试类中重构它会更好吗?

2 个答案:

答案 0 :(得分:6)

关于是否将测试拆分为两个类的问题:

由于它们显然是非常不同类型的测试(单元测试和性能测试),因此我会将它们放在不同的类中,仅此原因。

进一步的思考:

我不认为使用@Category注释是个坏主意。我在一个包含数十或数百个包含测试的类的典型项目中做的是用@Category注释测试(而不是方法),然后是use the ClassPathSuite library避免重复分类测试的努力。 (也许run the tests by category using Ant。)

如果你只有两个测试类,那当然没关系。您可以保留类别和套件,或者将它们丢弃(如您所说,测试由Ant中的类名运行),如果有额外的类错误的话。我会保留它们,然后转向上述场景,因为通常(在一个健康的项目中)会有更多的测试随着时间的推移积累。 : - )

答案 1 :(得分:1)

如果你只有两个测试类,那么它可能无关紧要。我工作的项目有50-60个班级。按名称列出所有这些都会让人筋疲力尽。您可以使用文件名模式但我觉得注释更清晰。