junit单元测试报错:java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
Posted 戒爱学Java
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了junit单元测试报错:java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing相关的知识,希望对你有一定的参考价值。
今天在复习的时候对对一些知识点进行巩固,用到了junit-4.12.jar,手动导入jar包,然后运行然后报错:java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing。刚开始我以为代码错了,看了看发现不是代码的问题,是导包的问题。然后查询了百度,发现了是版本的问题:
然后说换个低版本的就可以了,说换成4.10就可以了。测试了一下果然
查官网:JUnit now uses the latest version of Hamcrest. Thus, you can use all the available matchers and benefit from an improved assertThat which will now print the mismatch description from the matcher when an assertion fails.
junit.jar: Includes the Hamcrest classes. The simple all-in-one solution to get started quickly.Starting with version 4.11, Hamcrest is no longer included in this jar.
junit-dep.jar: Only includes the JUnit classes but not Hamcrest. Lets you use a different Hamcrest version.
注意黑色加下划线的部分 意思是4.11以上版本不在包含hamcrest。
所以现在有两个办法解决:
- junit版本降到4.10
- 导入hamcrest-core-1.3.jar
使用Junit单元测试报错“No runnable methods“
异常
使用Junit单元测试报错如下:
java.lang.Exception: No runnable methods
at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:191)
at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:128)
at org.junit.runners.ParentRunner.validate(ParentRunner.java:416)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:84)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:65)
at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:10)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:36)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:50)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:221)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)
错误代码
import org.junit.Test;
public class Test01
@Test
public void test()
System.out.println("hello world");
原因
代码没有任何问题。@Test
注解是放在方法上的,@Test
注解也来自于包org.junit.Test
。
这个问题必须同另外一个问题一起说明比较合适:使用Junit单元测试报错“No tests found matching Method test01(Test01) from ClassRequest@5387f9e0“
模拟下出现问题代码的环境:maven项目,有一个main/java/Test01.java
和test/java/Test01.java
类。
main/java/Test01.java
import org.junit.Test;
public class Test01
@Test
public void test01()
System.out.println("hello world - main/java/Test01.java");
test/java/Test01.java
public class Test01
public static void main(String[] args)
System.out.println("hello world - test/java/Test01.java");
要出现上面的问题,需要符合下面的情况:
- 相同路径。指的是类的路径必须同级,如
test/java/Test01.java
与mian/java/Test01.java
是同级路径,test/java/Test01.java
与mian/java/hello/Test01.java
就不是同级路径了,也就不会发生冲突。 - 相同类名。指的是在相同路径下的类名相同,如
test/java/Test01.java
与main/java/Test01.java
既是相同路径又类名相同,test/java/Test02.java
与main/java/Test01.java
虽然路径相同但是类名不同,也不会发生冲突。 - 使用
@Test
注解与否。在路径和类名都相同的情况下,如果main/java/Test01.java
中有使用了@Test
注解的方法,而test/java/Test01.java
中一定没有使用@Test
注解的方法就会发生此冲突,如果有使用了@Test
注解的方法并且方法名不同就会报使用Junit单元测试报错“No tests found matching Method test01(Test01) from ClassRequest@5387f9e0“。
在满足上述条件后,执行main/java
下的带有@Test
注解的测试方法才会报上面这个错。
解决
- 让它们的类路径不同
- 让它们的类名不同
test/java
下一定要有使用了@Test
注解的方法
总之,建议不要在main/java
下写带有@Test
注解的测试方法,更不要让它们冲突。
以上是关于junit单元测试报错:java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing的主要内容,如果未能解决你的问题,请参考以下文章
JUnit 报错 method initializationerror not found:JUnit4单元测试报错问题
junit 单元测试报错java.lang.NoClassDefFoundError
[转]method initializationerror not found:JUnit4单元测试报错问题
错误记录Android 单元测试报错 ( ExampleUnitTest.kt: (3, 12): Unresolved reference: junit / Test / assertEqu )
如何解决JUnit4单元测试报错 :method initializationerror not found
junit单元测试报错:java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing