4

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

目前,我在一个类中拥有所有测试方法,称之为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 中按类名调用测试,即不在一个包中运行所有测试。

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

4

2 回答 2

6

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

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

一些进一步的思考:

不过,我不认为使用@Category注释是一个坏主意。在一个包含数十个或数百个包含测试的类的更典型的项目中,我要做的是用 注释测试(而不是方法)@Category,然后使用 ClassPathSuite 库来避免对测试进行分类的重复工作。(并且可能使用 Ant 按类别运行测试。)

如果您只有两个测试课程,那当然没关系。您可以保留类别和套件,或者将它们扔掉(正如您所说的那样,测试是在 Ant 中按类名运行的),如果有额外的类让您感到厌烦。我会保留它们,并转向上述场景,因为通常(在一个健康的项目中)随着时间的推移会积累更多的测试。:-)

于 2013-04-03T19:46:09.120 回答
1

如果您只有两个测试课程,那么可能没关系。我从事的项目有 50-60 节课。按名称列出它们会很累。您可以使用文件名模式,但我觉得注释更清晰。

于 2013-04-03T02:56:22.607 回答