Description
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")