从 Junit4 迁移到 Junit5 时没有 Runnable 方法错误:

No Runnable methods error when migrating from Junit4 to Junit5 :

我刚刚尝试使用官方迁移指南从 JUnit 4 迁移到 Junit 5。

这是我使用 JUnit 4 的原始 class:

package com.mypack;

import javax.annotation.Autowired;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.github.springtestdbunit.annotation.DatabaseSetup;

@RunWith(SpringJUnit4ClassRunner.class)
@DatabaseSetup(value = "/db_data/dao/dbunit_file.xml")
public class PersonalTest extends AbstractTU {

    @Autowired
    private SomeDAO someDAO;

    @Test
    public void someTest() throws Exception {
        // -- Test details with classic asserts
    }
}

这里是摘要的代码class:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:/mybeans.xml" })
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class,
        DbUnitTestExecutionListener.class })
public abstract class AbstractTU extends AbstractModelTU {
}

这曾经可以正常工作,即使它非常干净。 AbstractModelTU class 只包含一些在子 classes 中使用的正确初始化的变量,它没有添加任何其他注释。

我在我的 Maven 依赖项中导入了 junit jupiter 和 junit vintage。 根据指南,我应该将 @RunWith(SpringJUnit4Runner.class) 更改为 @ExtendWith(SpringExtension.class)。我已经这样做了,class 没有显示编译错误或冲突。

但是,当我 运行 我的测试时出现此错误:

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.runners.model.RunnerBuilder.runners(RunnerBuilder.java:101)
    at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:87)
    at org.junit.runners.Suite.<init>(Suite.java:102)
    at org.junit.runners.Suite.<init>(Suite.java:70)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:107)
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
    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.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:84)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:70)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:43)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

在 Eclipse 上,我什至无法执行 运行 作为 Junit 测试,它没有显示在菜单中,尽管我的 Eclipse 添加了 junit 5 支持插件4.7 版本。

编辑: 当我再次尝试安装插件时,我遇到了这个错误:junit5 支持以下解决方案不可用

我做错了什么?我错过了什么?有没有人找到解决此类问题的方法?这似乎是一个简单的错误,但我无法弄清楚。

在此先感谢您的帮助。

使用 current beta support for JUnit 5 in Eclipse 4.7,您需要在项目类路径中手动包含 JUnit 5 库(构建路径 -> 添加库 -> JUnit -> JUnit 5)。那么您应该能够像往常一样进行 运行 JUnit 5 测试。

在@Boni 回复后我注意到 link 说 eclipse 需要在 4.7 M-build 中,但我也发现 this link 那说eclipse应该在4.7.1中。此外,还有一个 link 到 this bug 用于在 eclipse 4.5 M-build 中运行 Junit5。

如果您使用的不是 eclipse 4.7.1 或更高版本,您应该尝试更新您的 eclipse 版本