Java 从Junit4迁移到Junit5时没有可运行方法错误:

Java 从Junit4迁移到Junit5时没有可运行方法错误:,java,spring,eclipse,maven,junit5,Java,Spring,Eclipse,Maven,Junit5,我刚刚尝试使用官方的迁移指南从JUnit4迁移到JUnit5 下面是我使用JUnit 4的原始类: 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.githu

我刚刚尝试使用官方的迁移指南从JUnit4迁移到JUnit5

下面是我使用JUnit 4的原始类:

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
    }
}
下面是抽象类的代码:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:/mybeans.xml" })
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class,
        DbUnitTestExecutionListener.class })
public abstract class AbstractTU extends AbstractModelTU {
}
即使它非常干净,它也能正常工作。 AbstractModelTU类只包含一些在子类中使用的正确初始化的变量,它不添加任何其他注释

我在maven依赖项中导入了junit jupiter和junit vintage。 根据指南,我应该将
@RunWith(SpringJUnit4Runner.class)
更改为
@ExtendWith(SpringExtension.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)
java.lang.Exception:没有可运行的方法
位于org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:191)
位于org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:128)
位于org.junit.runners.ParentRunner.validate(ParentRunner.java:416)
在org.junit.runners.ParentRunner上(ParentRunner.java:84)
位于org.junit.runners.BlockJUnit4ClassRunner。(BlockJUnit4ClassRunner.java:65)
位于org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:10)
位于org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
位于org.junit.internal.builders.AllDefaultPossibilityBuilder.runnerForClass(AllDefaultPossibilityBuilder.java:26)
位于org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
位于org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:101)
位于org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:87)
位于org.junit.runners.Suite.(Suite.java:102)
位于org.junit.runners.Suite.(Suite.java:70)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:423)
位于org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:107)
位于org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
位于org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
位于org.junit.internal.builders.AllDefaultPossibilityBuilder.runnerForClass(AllDefaultPossibilityBuilder.java:26)
位于org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
位于org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
位于org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:84)
位于org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:70)
位于org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:43)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
在eclipse上,我甚至不能执行Run as Junit测试,尽管在我的Eclipse4.7版本中添加了JUnit5支持插件,但它没有显示在菜单中

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

我做错了什么?我错过了什么?有人找到解决这种问题的办法了吗?这似乎是个简单的错误,但我想不出来


提前感谢您的帮助。

使用,您需要在项目类路径(构建路径->添加库->JUnit->JUnit 5)中手动包含JUnit 5库。然后您应该能够像往常一样运行JUnit5测试。

follow@Boni response我注意到链接上说eclipse需要采用4.7m版本,但我也发现 也就是说eclipse应该在4.7.1中。此外,还有一个链接,用于在Eclipse4.5M-build中运行Junit5


如果您不在eclipse 4.7.1或更高版本中,您应该尝试更新您的eclipse版本

目前正在尝试更正此问题,但我在Libraries中找不到junit5,只有junit3和junit4可用。您是否安装了“junit5氧气支持”?是的,它已安装。一旦我尝试了您的建议,我会立即回复您。好的,所以我不知道如何正确安装Eclipse4.7.1并能够使用您的解决方案。也许我会稍后再试。。。不管怎样,谢谢。好的,在再次点击你提到的链接后,它似乎开始工作了。不知道发生了什么变化,谢谢!您提到的eclipse更新实际上是关于EclipseSDK的。跟随@boni链接帮助我纠正了这一点。无论如何谢谢你!