Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
mpiggott opened this issue Dec 19, 2023 · 2 comments
Open

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

mpiggott opened this issue Dec 19, 2023 · 2 comments
Labels

Comments

@mpiggott
Copy link

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

@mpiggott mpiggott added the bug label Dec 19, 2023
@mpiggott
Copy link
Author

I could open a PR with my thought from the Additional Context that idea makes sense.

@leonard84
Copy link
Member

leonard84 commented Jan 24, 2024

@mpiggott adding an optional reference class for the ClassLoader for the ReflectionUtil methods makes sense. This would require overloads for all methods that use a classloader. A PR would be welcome.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants