Skip to content

AbstractRuleExtension can't load rule classes in OSGi runtime #1852

Closed
@mpiggott

Description

@mpiggott

Describe the bug

AbstractRuleExtension uses ReflectionUtil.loadClassIfAvailable() to attempt to load JUnit 4 rule classes. ReflectionUtil attempts to load the classes in the context of spock-core which does not import junit4 packages. In an OSGi environment the rules classes are not on the classpath of the spock-core bundle .

To Reproduce

  • A specification with @Rule or other JUnit 4 rules
  • Specification is executed in an OSGi environment

Expected behavior

JUnit 4 rules work in OSGi

Actual behavior

JUnit4 extensions for rules do not function

Java version

Eclipse Adoptium 8.0.382.5

Buildtool version

Not applicable

What operating system are you using

Windows

Dependencies

  • spock-core 2.3-groovy-3.0
  • spock-junit4 2.3-groovy-3.0
  • Karaf 4.3.9
  • PaxExam 4.3.15

Additional context

It may make sense to have add a method to ReflectionUtil which a caller could provide a Class to use for loading, e.g. ReflectionUtil.loadClassIfAvailable(Class<?> cp, String className) which would use cp.getClassLoader() as opposed to ReflectionUtil.class.getClassLoader().

Callers outside of spock-core (e.g. spock-junit4) would provide their own context e.g. ReflectionUtil.loadClassIfAvailable(AbstractRuleExtension.class, "org.junit.Rule")

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions