【问题标题】:"no runnable methods" on junit with custom annotation and all tests filtered带有自定义注释和过滤所有测试的junit上的“无可运行方法”
【发布时间】:2013-03-13 19:15:05
【问题描述】:

我使用的是 JUnit 4.11,扩展了 BlockJUnit4ClassRunner 并使用了自定义注释。 如果注解带有某个参数,则不会运行测试。

这很好用,除了一个类中的所有测试都被过滤掉但自定义测试运行器的情况。

基本上和这篇文章中描述的完全一样:JUnit4 skip test(s) according to custom java annotations

我尝试了这篇文章中提到的解决方法:JUnit: how to avoid "no runnable methods" in test utils classes

如果我引入了一个虚拟测试,那么至少有一个测试会一直运行,一切都很好。如果所有测试都没有运行,因为它们都有注释,我会得到“No runnable methods”异常。

我可以接受解决方法,但应该有更好的方法。 我感谢任何指示或解释我做错了什么或如何改善这种情况。

【问题讨论】:

  • 我还没有尝试过,但是如果您使用 JUnit 规则来实现它可能会起作用吗? cwd.dhemery.com/2010/12/junit-rules
  • @Zutty,我去看看,谢谢。我还看到,junit-ext(ensions) 会有适当的行为,不幸的是,它们有点过时并且不在 maven 中(因此不是项目的选项)。

标签: java junit annotations test-runner


【解决方案1】:

由于在 validateInstanceMethods 中执行的验证,您会收到此错误,因为 computeTestMethods() 返回一个空列表:

protected void validateInstanceMethods(List<Throwable> errors) {
        validatePublicVoidNoArgMethods(After.class, false, errors);
        validatePublicVoidNoArgMethods(Before.class, false, errors);
        validateTestMethods(errors);

        if (computeTestMethods().size() == 0)
            errors.add(new Exception("No runnable methods"));
    }

您可以覆盖此方法并删除大小验证或添加您自己的验证,这将考虑带注释的测试方法。
请注意,此方法为@Deprecated,将在以后的版本中删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    相关资源
    最近更新 更多