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

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

目前,我在一个类中有所有测试方法,称之为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运行unit testing而不是性能测试(我不认为包含Ant代码是必要的)。

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

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

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

因为它们显然是非常不同类型的测试 (unit testing和性能测试),所以我会在任何情况下将它们放在不同的类中,仅仅因为这个原因。

一些进一步的思考:

我不认为使用@Category注释是个坏主意。 我在一个包含数十或数百个包含测试的类的典型项目中使用@Category注释测试 (而不是方法),然后使用ClassPathSuite库来避免重复分类测试。 (也许可以使用Ant按类别运行测试 。)

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

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