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

问题描述

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

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

一些进一步的思考:

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

如果您只有两个测试类,那么它当然没什么大不了的。您可以保留类别和套件,也可以将其丢弃(如您所说的,这些测试是在Ant中按类别名称运行的),如果您遇到其他类别的错误。我会保留它们,并朝着上述场景前进,因为通常(在一个健康的项目中)随着时间的推移会积累更多的测试。:-)

解决方法

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

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

这样做有意义吗?将其按类别进行分类并加上注释的原因是什么?或者如果我仅在两个简单的测试类中对其进行重构会更好吗?

相关文章

猜你在找的编程问答相关文章

在Pandas数据框中旋转数据表
如何获得浮点序列中的下一个值?
获取Instagram粉丝
在批处理结束时检测到不可提交的事务。交易回滚
将一个文本文件文件夹与一个单元格中的每个内容合并为一个CSV文件
在使用JSON数据时,如何防止我的应用程序意外崩溃,“关闭”,而代之以处理异常?
JDBC批处理INSERT,返回ID
具有多个表的复杂INNER JOIN查询的回显结果