更好或自定义JUnit测试过滤

Jon*_*s N 7 java eclipse junit

我想实现一个更好的系统来过滤测试,以便在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. 
        } 
    }
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏,-j

Aar*_*lla 5

Eclipse使用默认的JUnit代码来运行测试,因此您只需要教授JUnit您的新技巧,Eclipse就能够做到这一点.

这样做:如何在没有套件的情况下将测试拆分成套件@SuiteClasses

强硬.根据我的经验,有几种解决方案:

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

    很好:没有涉及JUnit魔法,如果你忘记某些东西会保证你的安全(比如添加@Category一个新的测试).

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

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

  3. 添加假设.org.junit.Assume是一个很好的小野兽,默默地无法通过测试.测试将不会运行(或者它将在第一个假设失败之前运行)但它也不会记录错误.这有点像聪明@Ignore

    编写设置代码,确定要运行哪些测试并放入assumeThat()代码中.

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

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