Java &引用;“没有可运行的方法”;在junit上使用自定义注释和筛选的所有测试

Java &引用;“没有可运行的方法”;在junit上使用自定义注释和筛选的所有测试,java,junit,annotations,test-runner,Java,Junit,Annotations,Test Runner,我正在使用JUnit4.11,扩展了BlockJUnit4ClassRunner并使用了自定义注释。 如果注释带有某个参数,则测试将不会运行 这可以很好地工作,除了一个类中的所有测试都被过滤掉,但自定义测试运行程序除外 基本上和这篇文章描述的一样: 我尝试了本文中提到的解决方法: 如果我引入了一个虚拟测试,这样至少有一个测试会一直运行,那么一切都很好。如果所有测试都没有运行,因为它们都有注释,我将得到“No runnable methods”异常 我可以接受这种变通办法,但应该有更好的办法。 我

我正在使用JUnit4.11,扩展了BlockJUnit4ClassRunner并使用了自定义注释。 如果注释带有某个参数,则测试将不会运行

这可以很好地工作,除了一个类中的所有测试都被过滤掉,但自定义测试运行程序除外

基本上和这篇文章描述的一样:

我尝试了本文中提到的解决方法:

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

我可以接受这种变通办法,但应该有更好的办法。
我非常感谢任何关于我做错了什么或如何改善这种情况的提示或解释。

由于在
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"));
    }
受保护的void validateInstanceMethods(列出错误){
validatePublicVoidNoArgMethods(After.class、false、errors);
validatePublicVoidNoArgMethods(Before.class,false,errors);
validateTestMethods(错误);
if(computeTestMethods().size()==0)
添加(新异常(“无可运行方法”);
}
您可以覆盖此方法并删除尺寸验证或添加您自己的验证,这将考虑带注释的测试方法。

请注意,此方法已弃用,并将在将来的版本中删除。

我还没有尝试过它们,但如果您使用JUnit规则实现此方法,它是否可以工作@祖蒂,我去看看,谢谢。我还看到,junit ext(ensions)将有一个适当的行为,不幸的是,它们有点过时,不在maven中(因此不是项目的选项)。