When using Java and JUnit 5 I can register an extension using a non-static field like this:
@RegisterExtension
MyExtension myExtension = new MyExtension(...);
When I try to use Kotlin (1.4.10) instead, I cannot seem to get this to work. I've tried for example:
@RegisterExtension
val myExtension = MyExtension(...)
but it fails with:
org.junit.platform.commons.PreconditionViolationException: Failed to register extension via @RegisterExtension field [private final com.something.SomeTest.myExtension]: field must not be private.
when I try to run it.
If I try to add an @JvmField annotation:
@JvmField
@RegisterExtension
val myExtension = MyExtension(...)
it fails with a compile-time error instead:
JvmField can only be applied to final property
What I can do is to move it to a companion object:
companion object {
@JvmField
@RegisterExtension
val myExtension = MyExtension(...)
}
now it works. But I cannot declare myExtension inside a companion object because the input to the constructor (...) is not available yet. I simply want it to be executed the same way as it would in the Java example presented above.
How can I do this in Kotlin (1.4)?
I had similar issue. I just had to make the field final in kotlin (in addition to annotatiing it with @JvmField):
val wiremockPort = 8081
@RegisterExtension
@JvmField
final val wireMockServer = WireMockTestRunner(wiremockPort)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With