Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更好的或自定义JUnit测试筛选_Java_Eclipse_Junit - Fatal编程技术网

Java 更好的或自定义JUnit测试筛选

Java 更好的或自定义JUnit测试筛选,java,eclipse,junit,Java,Eclipse,Junit,我想实现一个更好的系统来过滤在Eclipse中JUnit下运行的测试。我想要@Categories,但不必在@SuiteClasses({})注释中指定类的列表,因为我认为这样会减少值,增加我们必须进行的手动维护量 是否有某种方法可以钩住Eclipse运行JUnit test的流程,以便能够对所有包含@test的类进行自定义筛选?例如,像这样的课程: @CustomFilteredTesting public class TheCustomFilteredTestRun {

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

是否有某种方法可以钩住Eclipse运行JUnit test的流程,以便能够对所有包含@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. 
        } 
    }
@CustomFilteredTesting
public类自定义筛选程序{
公共布尔值IncludeHistTestClass(类klass){
//例如,测试klass是否在包或子系统中
//或者某个接口的子类型。
} 
}

任何需要帮助的地方,-j

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

这就是问题所在:如果没有
@suitelasses
,您如何将测试拆分为套件

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

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

    很好:没有JUnit魔法,如果你忘记了什么(比如在新的测试中添加一个
    @Category

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

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

  • 添加假设
    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报告在最后为您提供了一个报告,该报告告诉您需要做的所有事情,关于哪些组已运行和未运行,哪些方法属于哪些组,等等……有趣的提示。据我所知,它的主要目的是进行多项目(模块?)测试。不过,我不确定它是否解决了问题?