是否有用于运行测试组的JUnit TestRunner?

我目前正在使用JUnit 4,需要将我的测试划分为可以任意组合选择性运行的组。 我知道TestNG有一个注释测试的function,可以将它们分配给组,但我现在无法迁移到TestNG。 看来这可以通过一些自定义注释和一个自定义JUnit TestRunner在JUnit中轻松完成。 我已经检查了两个JUnit文档并在网上搜索但是找不到这样的东西。 有人知道这样的TestRunner吗?

更新:感谢您对测试套件的回复。 我应该在原来的问题中解决这些问题。 我们走了:我不想使用测试套件,因为他们需要我手动创建和管理它们,这意味着触摸我的所有测试并手动将它们安排到套件中(太多工作和维护噩梦)。 我需要做的就是运行所有unit testing,除了一些真正的集成测试。 所以我想注释这些,并运行所有其他人。 在其他时候,我想只运行集成测试。 我还需要将unit testing放入多个组中,这对套件来说是不可能的。 希望这有助于澄清事情。

更新2:如果JUnit没有这个OOB,我正在寻找一个将其添加到JUnit的开源库(注释+自定义JUnit Test Runner)。

查看Spring的SpringJUnit4ClassRunner 。 我已经使用它来选择性地运行基于System属性的测试,使用IfProfileValue注释。

这个:

@IfProfileValue(name="test-groups", values={"unit-tests", "integration-tests"}) public void testWhichRunsForUnitOrIntegrationTestGroups() { // ... } 

如果系统属性’test-groups’设置为’unit-tests’或’integration-tests’,则会运行。

更新: JUnitExt有@Category@Prerequisite注释,看起来应该做你需要的。 但是,我自己从未使用它,所以我不能保证它。

JUnit目前没有这样的跑步者。 解决潜在问题,需要在有限的时间内从测试套件中获得合理的保证,这是我们下一版本的最高开发优先级。 与此同时,实现一个通过注释工作的filter似乎不会是一个大项目,尽管我有偏见。

首先,您要解决两个问题 – unit testing(通常与被测单元在同一个包中)和集成测试。 我通常将集成测试保存在一个单独的包中,例如com.example.project.tests。 在eclipse中,我的项目看起来像:

 project/ src/ com.example.project/ tsrc/ com.example.project/ com.example.project.tests/ 

右键单击包并选择“运行”将运行包中的测试; 在源文件夹上执行相同操作会运行所有测试。

你可以通过使用Suite跑步者来表达一种类似的效果,尽管你对此表示不感兴趣。 但是,这违反了DRY – 您必须在套件类中保持测试名称的副本是最新的。 但是,您可以轻松地将相同的测试放在多个套件中。

 @RunWith(Suite.class) @Suite.SuiteClasses( { TestAlpha.class, TestBeta.class }) public class GreekLetterUnitTests { } 

当然,我真的应该保持这些事情的自动化。 这样做的好方法是使用Ant任务 。

                    

不,不幸的是,与TestNG小组没有类似的概念。 它计划用于JUnit4,但由于一些不明原因,它已从计划中删除。

您可以创建套件,但这会将所有配置放在套件中,而不是注释中。

JUnit 3允许您创建可以像任何其他测试一样运行的测试套件。 JUnit 4有没有类似的概念?

如果您正在使用ANT或maven,则可以通过按名称过滤测试来控制运行哪些测试。 有点尴尬,但它可能适合你。

TestNG有我的投票。 它是基于注释的,可以作为组,单个测试等运行,可以链接到Maven,并且可以作为其测试运行的一部分运行所有JUnit测试。

我强烈推荐它通过JUnit。

我的建议只是放弃JUnit并使用TestNG。 一旦你习惯了TestNG,Junit就像石器时代。