使用Junit单元测试报错“No tests found matching Method test01(Test01) from ClassRequest@5387f9e0“
Posted 二木成林
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Junit单元测试报错“No tests found matching Method test01(Test01) from ClassRequest@5387f9e0“相关的知识,希望对你有一定的参考价值。
异常
在src/main/java
包下的类中执行单元测试报错:
java.lang.Exception: No tests found matching Method test01(Test01) from org.junit.internal.requests.ClassRequest@5387f9e0
at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:40)
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)
Process finished with exit code -1
错误代码
import org.junit.Test;
public class Test01
@Test
public void test()
System.out.println("hello world");
原因
首先,代码没有任何问题,Test
包也没有导错,junit
版本如下:
<!-- Junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
这是一个maven项目,有main/java
和test/java
两个不同的目录,分别用来放正式代码和测试代码。但导致上面这种问题的出现是这样的,先模拟下:
main/java/Test01.java
和test/java/Test01.java
类名相同,并且是执行的是main/java/Test01.java
中的测试方法,而不是test/java/Test01.java
中的方法。虽然类名相同,但是里面使用了@Test
注解的方法名不同,两个类中的代码如下:
main/java/Test01.java
import org.junit.Test;
public class Test01
@Test
public void test01()
System.out.println("hello world");
test/java/Test01.java
import org.junit.Test;
public class Test01
@Test
public void test()
System.out.println("hello world");
此刻我们再来看错误提示:No tests found matching Method test01(Test01)
,意思是说在Test01这个类中没有方法test01()
,注意这个Test01
类指的是test/java/Test01.java
,因为该类中只有一个名为test()
的方法。
因此得以断定当test/java
与main/java
下的相同路径下同名的类中都使用@Test注解,那么一定是去找test/java
下相同路径同名类中的同名方法来执行,如果方法不存在则报错,如果存在则执行该方法而非执行main/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
虽然路径相同但是类名不同,也不会发生冲突。 - 方法名不同。指的是在相同路径下类名相同但是类中的方法正好
main/java
中有而test/java
中没有才会报错冲突,如果test/java
中有而main/java
中没有不会有问题。但如果正好这个方法在main/java
和test/java
中都有,那么执行的就是test/java
中的对应方法。
在满足上述条件后,执行main/java
下的带有@Test
注解的测试方法才会报上面这个错。
解决
- 让它们的类路径不同
- 让它们的类名不同
- 让它们的方法名不同
总之,建议不要在main/java
下写带有@Test
注解的测试方法,更不要让它们冲突。
以上是关于使用Junit单元测试报错“No tests found matching Method test01(Test01) from ClassRequest@5387f9e0“的主要内容,如果未能解决你的问题,请参考以下文章
junit单元测试成功,但是报错org.junit.runners.model.InvalidTestClassError: Invalid test class
junit 单元测试报错java.lang.NoClassDefFoundError
[转]method initializationerror not found:JUnit4单元测试报错问题
Junit5 单元测试 使用Spring 依赖注入 Idea 提示报错, 但是实际运行是没问题的,怎么解决红字报错问题?
使用Junit单元测试报错“No tests found matching Method test01(Test01) from ClassRequest@5387f9e0“
错误记录Android 单元测试报错 ( ExampleUnitTest.kt: (3, 12): Unresolved reference: junit / Test / assertEqu )