Java 更好的或自定义JUnit测试筛选
我想实现一个更好的系统来过滤在Eclipse中JUnit下运行的测试。我想要@Categories,但不必在@SuiteClasses({})注释中指定类的列表,因为我认为这样会减少值,增加我们必须进行的手动维护量 是否有某种方法可以钩住Eclipse运行JUnit test的流程,以便能够对所有包含@test的类进行自定义筛选?例如,像这样的课程:Java 更好的或自定义JUnit测试筛选,java,eclipse,junit,Java,Eclipse,Junit,我想实现一个更好的系统来过滤在Eclipse中JUnit下运行的测试。我想要@Categories,但不必在@SuiteClasses({})注释中指定类的列表,因为我认为这样会减少值,增加我们必须进行的手动维护量 是否有某种方法可以钩住Eclipse运行JUnit test的流程,以便能够对所有包含@test的类进行自定义筛选?例如,像这样的课程: @CustomFilteredTesting public class TheCustomFilteredTestRun {
@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.
}
}
@CustomFilteredTesting
public类自定义筛选程序{
公共布尔值IncludeHistTestClass(类klass){
//例如,测试klass是否在包或子系统中
//或者某个接口的子类型。
}
}
任何需要帮助的地方,-jEclipse都使用默认的JUnit代码来运行测试,因此您只需要教JUnit您的新技巧,Eclipse就可以做到这一点 这就是问题所在:如果没有
@suitelasses
,您如何将测试拆分为套件
很难。根据我的经验,有几种解决方案:
@Category
)
缺点:需要相当难看的文件读取/代码解析/反射mojoBlockJUnit4ClassRunner
来编写自己的测试运行程序。这将允许您添加自己的自定义注释来对测试进行分类并运行它们org.junit.假设
是一个很好的小野兽,可以默默地让测试失败。测试不会运行(或者直到第一个假设失败后才会运行),但也不会记录错误。这有点像一个智能的@Ignore
编写确定要运行哪些测试的设置代码,并将assumethit()
放入代码中使用。它有测试组,你们可以在头版看到一个例子。它在参数化测试中有更好的支持。通过Spring测试与Spring的集成更好。考虑使用ClassPathSuite:。我们使用它并定义一个套件,如下所示:
@RunWith(ClasspathSuite.class)
@ExcludeBaseTypeFilter({ NotUnitTestable.class })
public class AllTests {
}
使用注释不可能排除,因此我们只定义了一个标记接口(NotUnitTestable)。我们在Eclipse和使用JUnit-ANT集成的命令行构建中都以这种方式开始测试。您可以跳过所有这些障碍,或者只使用TestNG。我有一些用于类发现的代码,稍后将发布!努力;不过,我并不完全明白你说的“我有所有的测试”是什么意思?了解“假设”很好,但是我如何向它传达运行特定测试子集的意图呢?在Eclipse中是否有一种简单的方法来替代您自己的运行程序,它适用于所有测试,并且不需要特殊的注释?否则,“这将允许您添加自己的自定义注释来对测试进行分类并运行它们”似乎不太可取,因为您在每个测试中引入了大量的样板注释;e、 g.'@Test(groups={“slow”}')。这意味着它们与用于构建应用程序的包和其他东西完全分离。另外,我想使用IDE可以交叉引用的东西。便于维护。你知道TestNG是否允许@Test(xgroups=…),在这里可以使用类型来代替吗?Jonas:字符串的选择是经过深思熟虑的,以便于使用正则表达式来选择它们(例如,“运行属于组的所有方法”front-end.*).Eclipse、IDEA和HTML报告在最后为您提供了一个报告,该报告告诉您需要做的所有事情,关于哪些组已运行和未运行,哪些方法属于哪些组,等等……有趣的提示。据我所知,它的主要目的是进行多项目(模块?)测试。不过,我不确定它是否解决了问题?