如何使用 Maven Tycho 构建 Junit5 测试

How to build Junit5 tests w/ Maven Tycho

我想介绍Junit5 Jupiter一个老的RCP测试片段。我们使用 Maven Tycho 构建我们的 RCP 功能。 从 1.2 版开始,Tycho 应该支持 JUnit5 测试。

我得到的只是(当我运行mvn clean install

org.apache.maven.surefire.util.SurefireReflectionException: java.util.ServiceConfigurationError: org.junit.platform.engine.TestEngine: Provider org.junit.jupiter.engine.JupiterTestEngine not a subtype
    at org.apache.maven.surefire.util.ReflectionUtils.instantiateOneArg(ReflectionUtils.java:135)
    at org.apache.maven.surefire.booter.SurefireReflector.instantiateProvider(SurefireReflector.java:276)
    at org.apache.maven.surefire.booter.ProviderFactory.createProvider(ProviderFactory.java:113)
    at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:81)
    at org.eclipse.tycho.surefire.osgibooter.OsgiSurefireBooter.run(OsgiSurefireBooter.java:107)
    at org.eclipse.tycho.surefire.osgibooter.AbstractUITestApplication.runTests(AbstractUITestApplication.java:44)
    at org.eclipse.e4.ui.internal.workbench.swt.E4Testable.lambda[=10=](E4Testable.java:73)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.util.ServiceConfigurationError: org.junit.platform.engine.TestEngine: Provider org.junit.jupiter.engine.JupiterTestEngine not a subtype
    at java.util.ServiceLoader.fail(ServiceLoader.java:239)
    at java.util.ServiceLoader.access0(ServiceLoader.java:185)
    at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:376)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
    at java.util.ServiceLoader.next(ServiceLoader.java:480)
    at org.junit.platform.launcher.core.DefaultLauncher.validateUniqueIds(DefaultLauncher.java:63)
    at org.junit.platform.launcher.core.DefaultLauncher.<init>(DefaultLauncher.java:58)
    at org.junit.platform.launcher.core.LauncherFactory.create(LauncherFactory.java:59)
    at org.junit.platform.surefire.provider.JUnitPlatformProvider.<init>(JUnitPlatformProvider.java:85)
    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.apache.maven.surefire.util.ReflectionUtils.instantiateOneArg(ReflectionUtils.java:131)
    ... 7 more

这些是我对 Manifest.MF 的依赖:

 org.junit.jupiter.api;bundle-version="5.0.0",
 org.junit.jupiter.engine;bundle-version="5.0.0",
 org.junit.jupiter.params;bundle-version="5.0.0",
 org.junit.jupiter.migrationsupport;bundle-version="5.0.0",
 org.junit.vintage.engine;bundle-version="4.12.0",
 org.hamcrest.core;bundle-version="1.3.0",
 org.junit;bundle-version="4.12.0",
 org.opentest4j,
 org.junit.platform.commons;bundle-version="1.0.0",
 org.junit.platform.engine;bundle-version="1.0.0",
 org.junit.platform.launcher;bundle-version="1.0.0",
 org.junit.platform.runner;bundle-version="1.0.0",
 org.junit.platform.suite.api;bundle-version="1.0.0"

我主要通过反复试验来添加这些依赖项。我知道如果我也想 运行 在 Eclipse 中进行 J5 测试,我需要这些平台包。 在 Eclipse 中,旧测试和新测试都可以正常工作。

存在 junit 4.12 依赖项,否则所有那些旧的单元测试将无法再编译。

是否有关于如何使用 Tycho 进行 Junit5 测试的示例? 也许我在谷歌上搜索了错误的东西 ;)

https://wiki.eclipse.org/Tycho/How_Tos/JUnit5

诀窍似乎不是将 j5 添加为依赖项,而是通过 import-package 添加。

这对我有用。