我想实现一个更好的系统来过滤测试,以便在Eclipse中的JUnit下运行。我想要@Categories,但不必在@SuiteClasses({})注释中指定类列表,因为我认为这会降低价值,增加我们必须做的手动维护量。
有没有办法挂钩Eclipse运行JUnit测试的进程,能够对所有带有@Test的类进行自定义过滤?例如。像这样的一个类:
@CustomFilteredTesting
public class TheCustomFilteredTestRun {
public boolean includeThisTestClass(Class<?> klass) {
// e.g. test whether klass is in a package or subsystem
// or a subtype of some interface.
}
}
任何帮助表示赞赏,-j
答案 0 :(得分:5)
Eclipse使用默认的JUnit代码来运行测试,因此您只需要教授JUnit您的新技巧,Eclipse就能够这样做。
这样做:如何在没有@SuiteClasses
的情况下将测试拆分成套件?
坚韧。根据我的经验,有几种解决方案:
编写一个读取所有套件并尝试查找所有测试的测试,然后确保每个测试都在一个套件中。当您忘记向套件添加新测试时,此测试将通知您。
很好:没有涉及JUnit魔法,如果你忘了某些东西会保证你的安全(比如在新的测试中添加@Category
)。
缺点:需要相当丑陋的文件阅读/代码解析/反射魔力。
您可以通过扩展BlockJUnit4ClassRunner
来编写自己的测试运行器。这样您就可以添加自己的自定义注释来对测试进行分类并运行它们。
添加假设。 org.junit.Assume
是一个很好的小野兽,可以默默地通过测试。测试将不会运行(或者它将在第一个假设失败之前运行)但它也不会记录错误。这有点像聪明的@Ignore
编写确定要运行的测试的设置代码,并将assumeThat()
放入代码中。
我实际上更喜欢使用套房,因为:
答案 1 :(得分:3)
考虑使用ClassPathSuite:http://johanneslink.net/projects/cpsuite.jsp。我们使用它并按如下方式定义套件:
@RunWith(ClasspathSuite.class)
@ExcludeBaseTypeFilter({ NotUnitTestable.class })
public class AllTests {
}
使用Annotations无法排除,因此我们只是定义了一个标记接口(NotUnitTestable)。我们使用JUnit ANT集成在Eclipse和命令行构建中以这种方式开始我们的测试。
答案 2 :(得分:2)
使用TestNG。它有测试组,你可以在首页看到一个例子。它在参数化测试中有更好的支持。通过弹簧测试与Spring的集成更好。