Skip to content

ClassCastException when running tests with JUnit 6 #3552

@trancexpress

Description

@trancexpress

When running tests, we see the following error:

java.lang.ClassCastException: class org.eclipse.xtext.testing.extensions.InjectionExtension cannot be cast to class org.junit.jupiter.api.extension.Extension (org.eclipse.xtext.testing.extensions.InjectionExtension is in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @1dbafec0; org.junit.jupiter.api.extension.Extension is in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @313e7656)
 at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:186)
 at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:1024)
 at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:803)
 at java.base/java.util.stream.ReferencePipeline$7$1FlatMap.accept(ReferencePipeline.java:293)
 at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:214)
 at java.base/java.util.Collections$2.tryAdvance(Collections.java:5182)
 at java.base/java.util.Collections$2.forEachRemaining(Collections.java:5190)
 at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570)
 at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560)
 at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:153)
 at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:176)
 at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265)
 at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:632)
 at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)

Should be due to JUnit 5 versions here:

$ cat ./org.eclipse.xtext.testing/META-INF/MANIFEST.MF 
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Xtext Testing Infrastructure
Bundle-SymbolicName: org.eclipse.xtext.testing;singleton:=true
Bundle-Version: 2.41.0.qualifier
Bundle-ClassPath: .
Bundle-Vendor: Eclipse Xtext
...
Import-Package: org.apache.log4j;version="1.2.26",
 org.apache.log4j.spi;version="1.2.26",
 org.junit.jupiter.api;version="[5.1.0,6.0.0)",
 org.junit.jupiter.api.extension;version="[5.1.0,6.0.0)",
 org.junit.jupiter.api.function;version="[5.1.0,6.0.0)",
 org.junit.jupiter.api.io;version="[5.1.0,6.0.0)",
 org.junit.jupiter.params;version="[5.1.0,6.0.0)",
 org.junit.jupiter.params.provider;version="[5.1.0,6.0.0)",
 org.junit.platform.commons.support;version="[1.0.0,2.0.0)";resolution:=optional
...

There are other places that require JUnit 5 too:

$ git grep junit -- "**MANIFEST.MF" | grep "\[5"
org.eclipse.xtext.junit5.tests/META-INF/MANIFEST.MF: org.junit.jupiter.api;version="[5.1.0,6.0.0)",
org.eclipse.xtext.junit5.tests/META-INF/MANIFEST.MF: org.junit.jupiter.api.extension;version="[5.1.0,6.0.0)",
org.eclipse.xtext.junit5.tests/META-INF/MANIFEST.MF: org.junit.jupiter.api.function;version="[5.1.0,6.0.0)",
org.eclipse.xtext.junit5.tests/META-INF/MANIFEST.MF: org.junit.jupiter.api.io;version="[5.1.0,6.0.0)",
org.eclipse.xtext.junit5.tests/META-INF/MANIFEST.MF: org.junit.jupiter.params;version="[5.1.0,6.0.0)",
org.eclipse.xtext.junit5.tests/META-INF/MANIFEST.MF: org.junit.jupiter.params.provider;version="[5.1.0,6.0.0)",
org.eclipse.xtext.testing.junit5.tests/META-INF/MANIFEST.MF: org.junit.jupiter.api;version="[5.1.0,6.0.0)",
org.eclipse.xtext.testing.junit5.tests/META-INF/MANIFEST.MF: org.junit.jupiter.api.extension;version="[5.1.0,6.0.0)",
org.eclipse.xtext.testing.junit5.tests/META-INF/MANIFEST.MF: org.junit.jupiter.api.function;version="[5.1.0,6.0.0)",
org.eclipse.xtext.testing.junit5.tests/META-INF/MANIFEST.MF: org.junit.jupiter.api.io;version="[5.1.0,6.0.0)",
org.eclipse.xtext.testing.junit5.tests/META-INF/MANIFEST.MF: org.junit.jupiter.params;version="[5.1.0,6.0.0)",
org.eclipse.xtext.testing.junit5.tests/META-INF/MANIFEST.MF: org.junit.jupiter.params.provider;version="[5.1.0,6.0.0)",
org.eclipse.xtext.testing/META-INF/MANIFEST.MF: org.junit.jupiter.api;version="[5.1.0,6.0.0)",
org.eclipse.xtext.testing/META-INF/MANIFEST.MF: org.junit.jupiter.api.extension;version="[5.1.0,6.0.0)",
org.eclipse.xtext.testing/META-INF/MANIFEST.MF: org.junit.jupiter.api.function;version="[5.1.0,6.0.0)",
org.eclipse.xtext.testing/META-INF/MANIFEST.MF: org.junit.jupiter.api.io;version="[5.1.0,6.0.0)",
org.eclipse.xtext.testing/META-INF/MANIFEST.MF: org.junit.jupiter.params;version="[5.1.0,6.0.0)",
org.eclipse.xtext.testing/META-INF/MANIFEST.MF: org.junit.jupiter.params.provider;version="[5.1.0,6.0.0)",
org.eclipse.xtext.tests/testdata/wizard-expectations/mavenTychoJUnit5/mavenTychoJUnit5.parent/mavenTychoJUnit5.tests/META-INF/MANIFEST.MF:Import-Package: org.junit.jupiter.api;version="[5.1.0,6.0.0)",
org.eclipse.xtext.tests/testdata/wizard-expectations/mavenTychoJUnit5/mavenTychoJUnit5.parent/mavenTychoJUnit5.tests/META-INF/MANIFEST.MF: org.junit.jupiter.api.extension;version="[5.1.0,6.0.0)"
org.eclipse.xtext.tests/testdata/wizard-expectations/mavenTychoJUnit5/mavenTychoJUnit5.parent/mavenTychoJUnit5.ui.tests/META-INF/MANIFEST.MF:Import-Package: org.junit.jupiter.api;version="[5.1.0,6.0.0)",
org.eclipse.xtext.tests/testdata/wizard-expectations/mavenTychoJUnit5/mavenTychoJUnit5.parent/mavenTychoJUnit5.ui.tests/META-INF/MANIFEST.MF: org.junit.jupiter.api.extension;version="[5.1.0,6.0.0)"
org.eclipse.xtext.ui.testing/META-INF/MANIFEST.MF: org.junit.jupiter.api;version="[5.0.0,6.0.0)";resolution:=optional,

How do we want to deal with that? Drop JUnit 5 support and move the dependencies to JUnit 6?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions