java JUnit:未找到类定义错误:org/junit/运行程序/操作/过滤器

2cmtqfgy  于 2022-12-10  发布在  Java
关注(0)|答案(5)|浏览(111)

当我尝试执行某些公寓测试时,会引发下列错误:

java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:190)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadTestLoaderClass(RemoteTestRunner.java:320)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createRawTestLoader(RemoteTestRunner.java:310)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createLoader(RemoteTestRunner.java:305)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:283)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:207)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:191)

我必须提到junit-4.11.jar被添加到项目构建路径中。

**编辑:**我(Gábor Lipták)读过另一个问题,这个问题应该是重复的。***这不是重复的。***如果有人在Eclipse中使用Gradle Buildship作为构建插件,如果您错误地将测试类放在main/resorces而不是test/resources中,则会抛出此错误。Buildship在生成运行配置时似乎会处理测试与编译类路径。请参见下面我的.classpath文件片段作为证据:

<classpathentry kind="src" output="bin/main" path="src/main/resources">
    <attributes>
        <attribute name="gradle_scope" value="main"/>
        <attribute name="gradle_used_by_scope" value="main,test"/>
    </attributes>
</classpathentry>

<classpathentry kind="src" output="bin/test" path="src/test/resources">
    <attributes>
        <attribute name="gradle_scope" value="test"/>
        <attribute name="gradle_used_by_scope" value="test"/>
    </attributes>
</classpathentry>
2j4z5cfb

2j4z5cfb1#

即使我也面临着同样的问题,所以尝试以下步骤-
1.以鼠标器右击按一下[套件总管]中的项目,然后按一下[属性]。
1.单击“库”选项卡.
1.单击“添加库”按钮。
1.选择“JUnit,”然后单击“下一步.”
1.选择JUnit 4(这就是我正在使用的)。
1.单击“完成”。
1.现在以鼠标器右击按一下包含公寓测试的档案,然后选取[属性]。
1.在“运行/调试”设置下,从该文件的“启动配置”中删除所有条目。单击“确定”。
希望你现在能进行测试。

cu6pst1q

cu6pst1q2#

将JUnit库添加到模块路径而不是类路径可能会导致此错误。
在Eclipse最左边的面板“Package Explorer”中,右键单击您的项目,向下转到属性,然后转到“Java构建路径”,单击“类路径”而不是“模块路径”,单击“添加库...”,然后单击Junit。

gpfsuwkq

gpfsuwkq3#

在我的示例中,错误具有相同的堆栈跟踪(以java.lang.Class.forName0(Native Method)结尾),但错误消息不同:
java.lang.VerifyError: (class: org/junit/runner/manipulation/Alphanumeric, method: create signature: (Lorg/junit/runner/manipulation/Ordering$Context;)Lorg/junit/runner/manipulation/Ordering;) Wrong return type in function
原因是我把JUnit从4.11升级到了4.13.1,因为GitHub的“dependabot”在我的某个公共项目上建议我这么做,甚至创建了合并请求供我接受,我想“当然,为什么不呢,还有什么可能出错呢?”结论:不要信任GitHub的依赖者。

sy5wg1nm

sy5wg1nm4#

看起来这是eclipse中的一个缺陷,请更新eclipse或基于eclipse的编辑器来修复这个问题。
有关更多详细信息,请参阅此处-https://bugs.eclipse.org/bugs/show_bug.cgi?id=525844

5sxhfpxr

5sxhfpxr5#

在我的例子中,它只是在Eclipse中运行了一个Maven更新,然后它又工作了。

相关问题