【问题标题】:How to run JUnit 5 Tests using Run As > SWTBot Tests in Eclipse如何在 Eclipse 中使用 Run As > SWTBot 测试运行 JUnit 5 测试
【发布时间】:2019-10-24 14:17:02
【问题描述】:

我使用 SWTBot 2.8.0(在撰写本文时为最新版本)进行了一些非常简单的 UI 测试。它们保存在 Eclipse 插件片段中,不使用任何 JUnit 4 细节,例如 @RunWith(SWTBotJunit4ClassRunner.class)

public class MyTest {

  private final SWTBot bot = new SWTBot();

  @Test
  public void test() {
    // …
  }
}

现在,如果我从 org.junit.Test 切换到 JUnit 5 的 org.junit.jupiter.api.Test,然后尝试通过 Run As > SWTBot 测试运行测试,我会收到以下错误:

Exception in thread "WorkbenchTestable" java.lang.IllegalArgumentException: Error: test loader org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader not found:
org.junit.platform.commons.util.PreconditionViolationException: Cannot create Launcher without at least one TestEngine; consider adding an engine implementation JAR to the classpath
    at org.junit.platform.commons.util.Preconditions.condition(Preconditions.java:295)
    at org.junit.platform.launcher.core.DefaultLauncher.<init>(DefaultLauncher.java:58)
    at org.junit.platform.launcher.core.LauncherFactory.create(LauncherFactory.java:91)
    at org.junit.platform.launcher.core.LauncherFactory.create(LauncherFactory.java:67)
    at org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader.<init>(JUnit5TestLoader.java:34)
    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 java.lang.Class.newInstance(Class.java:442)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createRawTestLoader(RemoteTestRunner.java:370)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createLoader(RemoteTestRunner.java:365)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:309)
    at org.eclipse.swtbot.eclipse.core.RemotePluginTestRunner.init(RemotePluginTestRunner.java:85)
    at org.eclipse.swtbot.eclipse.core.RemotePluginTestRunner.main(RemotePluginTestRunner.java:63)
    at org.eclipse.swtbot.eclipse.core.UITestApplication.runTests(UITestApplication.java:120)
    at org.eclipse.e4.ui.internal.workbench.swt.E4Testable.lambda$0(E4Testable.java:76)
    at java.lang.Thread.run(Thread.java:748)

如果我中止执行,然后是 No Tests found with Runner: JUnit 5 消息。

我的MANIFEST.MF 包含以下几行:

Require-Bundle: org.eclipse.swtbot.swt.finder;bundle-version="[2.7.0,3.0.0)",
 org.junit;bundle-version="[4.12.0,5.0.0)",
 org.junit.jupiter.api;bundle-version="[5.4.0,6.0.0)",
 org.junit.jupiter.engine;bundle-version="[5.4.0,6.0.0)"

我还需要在Require-Bundle 标头中添加什么来消除上述异常?

注意:相比之下,Run As > JUnit Plug-in Test 正确初始化了测试运行器(JUnit 视图显示 test @987654330 @ 与 Runner: JUnit 5) 但随后冻结,因为测试当然是在 UI 威胁上运行的,即 no-go for SWTBot tests

【问题讨论】:

  • FWIW,需要包含 org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader 类的捆绑包 org.eclipse.jdt.junit5.runtime,也无济于事。

标签: junit eclipse-plugin eclipse-rcp junit5 swtbot


【解决方案1】:

根据mailing list announcement,SWTBot 将仅支持从 SWTBot 3.0 开始的 JUnit 5,作为 Eclipse 2020-06 的一部分发布。

【讨论】:

    猜你喜欢
    • 2019-01-30
    • 2012-10-16
    • 1970-01-01
    • 2018-09-22
    • 2018-12-26
    • 2021-09-10
    • 2012-06-02
    • 1970-01-01
    • 2011-07-24
    相关资源
    最近更新 更多