使用spring启动运行单元测试,“无可运行方法”错误

使用spring启动运行单元测试,“无可运行方法”错误,spring,spring-boot,unit-testing,kotlin,Spring,Spring Boot,Unit Testing,Kotlin,我正在用Spring boot运行单元测试,但我遇到了一个奇怪的无法运行的错误。顺便说一句,测试通过了,但在所有测试成功结束后,我突然发现了一个奇怪的错误: java.lang.Exception: No runnable methods at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:191) at org.junit.runners.BlockJU

我正在用Spring boot运行单元测试,但我遇到了一个奇怪的无法运行的错误。顺便说一句,测试通过了,但在所有测试成功结束后,我突然发现了一个奇怪的错误:

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.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:137)
at org.springframework.test.context.junit4.SpringRunner.<init>(SpringRunner.java:49)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
下面是错误的屏幕截图:

谢谢


注意:这是Kotlin,由于导入原因,您试图使用JUnit 5@Test注释:

导入org.junit.jupiter.api.Test

在控制台日志中,我们可以看到使用了JUnit4

如果要使用JUnit 4,应使用导入:


导入org.junit.Test

由于导入,您正试图使用junit 5@Test注释:

导入org.junit.jupiter.api.Test

在控制台日志中,我们可以看到使用了JUnit4

如果要使用JUnit 4,应使用导入:

import org.junit.Test

实际上,它是JUnit4和JUnit5的混合体。对于带有@Ignore或@Disabled的测试,我也有同样的想法,基于@Test是什么,我不想被忽略

您可以通过更新spring依赖项并从gradle中删除Junit4依赖项来避免spring出现此问题,这样您就不会混淆它们

testImplementationorg.springframework.boot:springbootstarter测试{ excludemodule=junit excludemodule=junit vintage引擎 excludemodule=mockito核心 } jupiter:junitjupiter:5.4.2 jupiter:junitjupiter api jupiter:junitjupiter引擎 一旦你知道你不需要使用@RunWithSpringRunner::class,你就可以看到导入的不同之处,它们都应该包含jupiter,你的类可以如下所示:

导入org.junit.jupiter.api.Assertions 导入org.junit.jupiter.api.Test 内部类示例测试{ @试验 趣味测验{ Assertions.assertTruetrue } } 事实上,它是JUnit4和JUnit5的混合体。对于带有@Ignore或@Disabled的测试,我也有同样的想法,基于@Test是什么,我不想被忽略

您可以通过更新spring依赖项并从gradle中删除Junit4依赖项来避免spring出现此问题,这样您就不会混淆它们

testImplementationorg.springframework.boot:springbootstarter测试{ excludemodule=junit excludemodule=junit vintage引擎 excludemodule=mockito核心 } jupiter:junitjupiter:5.4.2 jupiter:junitjupiter api jupiter:junitjupiter引擎 一旦你知道你不需要使用@RunWithSpringRunner::class,你就可以看到导入的不同之处,它们都应该包含jupiter,你的类可以如下所示:

导入org.junit.jupiter.api.Assertions 导入org.junit.jupiter.api.Test 内部类示例测试{ @试验 趣味测验{ Assertions.assertTruetrue } }
您的测试是否用@Test注释?-请将您的一些代码显示为最小集,以了解更多信息并提供帮助troubleshooting@blurfus添加了一个代码示例。是的,它们有注释我们正在使用Kotlinare您的测试带有@Test?-请将您的一些代码显示为最小集,以了解更多信息并提供帮助troubleshooting@blurfus添加了一个代码示例。是的,他们被注释了我们正在使用Kotlingood catch!使用junit 4 runner和junit 5@Test注释。。。那可能是个好机会!使用junit 4 runner和junit 5@Test注释。。。可能就是这样
package ca.bell.uc.hello.world

import org.junit.Assert
import org.junit.jupiter.api.Test
import org.junit.runner.RunWith
import org.springframework.test.context.junit4.SpringRunner


@RunWith(SpringRunner::class)
internal class example {

    @Test
    fun f() {
        Assert.assertTrue(true)
    }
}