Problem with RegisterExtension
arolfes opened this issue · 8 comments
When I use @RegisterExtension
I can have only one testmethod per class
In the example below the second testmethod fails always with
exception
kotlin.UninitializedPropertyAccessException: lateinit property activeSuite has not been initialized
at org.camunda.bpm.extension.process_test_coverage.model.DefaultCollector.getActiveSuite(DefaultCollector.kt:17)
at org.camunda.bpm.extension.process_test_coverage.junit5.ProcessEngineCoverageExtension.beforeTestExecution(ProcessEngineCoverageExtension.kt:89)
Testcase
package org.camunda.bpm.extension.process_test_coverage.examples
import org.camunda.bpm.engine.ProcessEngineConfiguration
import org.camunda.bpm.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration
import org.camunda.bpm.engine.runtime.ProcessInstance
import org.camunda.bpm.engine.test.Deployment
import org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareTests.assertThat
import org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareTests.complete
import org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareTests.runtimeService
import org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareTests.task
import org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareTests.withVariables
import org.camunda.bpm.extension.process_test_coverage.junit5.ProcessEngineCoverageExtension
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import org.junit.jupiter.api.extension.RegisterExtension
@Deployment(resources = ["order-process.bpmn"])
internal class OrderProcessKotlinTest {
@JvmField
@RegisterExtension
val extension = ProcessEngineCoverageExtension.builder().build()
@Test
fun shouldExecuteHappyPath() {
val instance = startProcess()
assertThat(instance).isWaitingAt("Task_ProcessOrder")
complete(
task(),
withVariables("orderOk", true)
)
assertThat(instance).isWaitingAt("Task_DeliverOrder")
complete(task())
assertThat(instance)
.hasPassed("Event_OrderProcessed")
.isEnded
}
@Test
fun shouldCancelOrder() {
val instance = startProcess()
assertThat(instance).isWaitingAt("Task_ProcessOrder")
complete(
task(),
withVariables("orderOk", false)
)
assertThat(instance)
.hasPassed("Event_OrderCancelled")
.isEnded
}
private fun startProcess(): ProcessInstance {
return runtimeService().startProcessInstanceByKey("order-process")
}
}
The problem also occurs with a java test class like the examples/junit5/src/test/java/org/camunda/bpm/extension/process_test_coverage/examples/OrderProcessTest.java
.
.
.
import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareTests.*;
@Deployment(resources = "order-process.bpmn")
public class OrderProcessTest {
@RegisterExtension
ProcessEngineCoverageExtension extension = ProcessEngineCoverageExtension.builder().build();
.
.
.
}
I found a workaround for kotlin code:
object MyProcessEngineCoverageExtensionObject {
val extension = ProcessEngineCoverageExtension.builder().build()
}
@Deployment(resources = ["order-process.bpmn"])
internal class OrderProcessKotlinTest {
@JvmField
@RegisterExtension
val extension = MyProcessEngineCoverageExtensionObject.extension
.
.
.
}
The workaround works also in JAVA
class ProcessEngineCoverageExtensionObject {
public static ProcessEngineCoverageExtension extension = ProcessEngineCoverageExtension.builder().build();
}
@Deployment(resources = "order-process.bpmn")
public class OrderProcessTest {
@RegisterExtension
public ProcessEngineCoverageExtension extension = ProcessEngineCoverageExtensionObject.extension;
.
.
.
}
So if the bug can't be fixed, maybe you can enhance the example in the readme how to use the RegisterExtension
Will provide a fix for this bug.
Actually the better way to register the extension is, to do it on a static field.
Otherwise the class coverage will not be triggered and no coverage report generated.
In the PR for the bugfix I will add this information in the documentation.
Hi, thank you for the Patch, i will have a look on it on monday
The changes are working fine. Thank you