使用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.javatest/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.javamian/java/Test01.java是同级路径,test/java/Test01.javamian/java/hello/Test01.java就不是同级路径了,也就不会发生冲突。
  • 相同类名。指的是在相同路径下的类名相同,如test/java/Test01.javamain/java/Test01.java既是相同路径又类名相同,test/java/Test02.javamain/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注解的测试方法,更不要让它们冲突。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值