java - 更好的或自定义的 JUnit 测试过滤

标签 java eclipse junit

我想实现一个更好的系统来过滤在 Eclipse 中的 JUnit 下运行的测试。我想要 @Categories,但不必在 @SuiteClasses({}) 注释中指定类列表,因为我认为这会降低值(value),增加我们必须做的手动维护量。

有没有什么方法可以挂接到 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

最佳答案

Eclipse 使用默认的 JUnit 代码来运行测试,因此您只需向 JUnit 传授您的新技巧,Eclipse 就能完成。

顺便提一下:如何在没有 @SuiteClasses 的情况下将测试拆分成套件?

艰难。根据我的经验,有几种解决方案:

  1. 编写一个测试来读取所有套件并尝试找到所有测试,然后确保每个测试都在一个套件中。当您忘记向套件添加新测试时,此测试会通知您。

    很好:不涉及 JUnit 魔法,如果您忘记了什么(比如将 @Category 添加到新测试),它会保证您的安全。

    缺点:需要相当丑陋的文件读取/代码解析/反射 mojo。

  2. 您可以通过扩展 BlockJUnit4ClassRunner 编写自己的测试运行器。这将允许您添加自己的自定义注释来对测试进行分类并运行它们。

  3. 添加假设。 org.junit.Assume 是一个不错的小野兽,可以默默地让测试失败。测试不会运行(或者它将运行直到第一个假设失败)但它也不会记录错误。这有点像一个聪明的@Ignore

    编写确定运行哪些测试的设置代码,并将 assumeThat() 放入您的代码中。

我实际上更喜欢使用套件,因为:

  1. “我有所有测试吗”测试告诉我什么时候错了
  2. 我有一个地方可以看到哪个测试去了哪里
  3. 我可以轻松编写更多测试以确保不会在套件中重复测试

关于java - 更好的或自定义的 JUnit 测试过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9737524/

相关文章:

java - 如何确保 ExecutorService 池已完成而不关闭它?

java - 使用 maven2 构建 java 项目的问题

java - PowerMock - 如何调用操作模拟方法的参数

unit-testing - 使用 influxdb 的程序的单元测试

java - 测试从数据库插入、更新和删除的类

Java获取类的路径

java - Eclipse 死代码警告 - 为什么我会收到它?

java - ehcache 磁盘存储中的元素不会过期

java - Eclipse PDE : How to load a new project in Package Explorer programmatically?

android - 我们如何在 Ubuntu 中安装 Android SDK 进行开发?