异常
使用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
注解的测试方法才会报上面这个错。文章来源:https://www.toymoban.com/news/detail-561771.html
解决
- 让它们的类路径不同
- 让它们的类名不同
-
test/java
下一定要有使用了@Test
注解的方法
总之,建议不要在main/java
下写带有@Test
注解的测试方法,更不要让它们冲突。文章来源地址https://www.toymoban.com/news/detail-561771.html
到了这里,关于使用Junit单元测试报错“No runnable methods“的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!