2

I am using Kogito service for bpmn flow (spring boot kogito starter is the maven dependency I have used) and as part of the flow have written several business rules using Drools. I have not been able to figure our unit test configuration to use if want to test just the rules independently.

e.g. If I try to create the KieServices in my test config, get the exception which I am not sure how to get past.

KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
kieBuilder.buildAll();

kieFIleSystem has the drl file reference.

Exception when executing above block from within Junit Test class:

java.lang.RuntimeException: You're trying to compile a Drools asset without mvel. Please add the module org.drools:drools-mvel to your classpath.
                at org.drools.core.base.CoreComponentsBuilder.throwExceptionForMissingMvel(CoreComponentsBuilder.java:34)
                at org.drools.compiler.compiler.Dialect$DummyDialect.getBuilder(Dialect.java:216)
                at org.drools.compiler.rule.builder.PatternBuilder.processSource(PatternBuilder.java:348)
                at org.drools.compiler.rule.builder.PatternBuilder.build(PatternBuilder.java:166)
                at org.drools.compiler.rule.builder.PatternBuilder.build(PatternBuilder.java:134)
                at org.drools.compiler.rule.builder.PatternBuilder.build(PatternBuilder.java:116)
                at org.drools.compiler.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:66)
                at org.drools.compiler.rule.builder.RuleBuilder.build(RuleBuilder.java:106)
                at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.internalAddRule(KnowledgeBuilderImpl.java:1186)
                at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.addRule(KnowledgeBuilderImpl.java:1181)
                at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.compileRulesLevel(KnowledgeBuilderImpl.java:1159)
                at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.compileRules(KnowledgeBuilderImpl.java:1107)
                at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.compileKnowledgePackages(KnowledgeBuilderImpl.java:925)
                at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.buildRules(KnowledgeBuilderImpl.java:2477)
                at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.buildPackages(KnowledgeBuilderImpl.java:2405)
                at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:105)
                at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:97)
                at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:268)
                at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:216)
                at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:80)
                at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:277)
                at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:245)
                at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:192)
                at com.anthem.systemy.codeset.RulesUtil.compile(RulesUtil.java:90)
                at com.anthem.systemy.codeset.RuleTest.test_drl(RuleTest.java:62)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:498)
                at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
                at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
                at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
                at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
                at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74)
                at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84)
                at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
                at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
                at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
                at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
                at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
                at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
                at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
                at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
                at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
                at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
                at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
                at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
                at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
                at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
                at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
                at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
                at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
                at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
                at org.junit.vintage.engine.execution.RunnerExecutor.execute(RunnerExecutor.java:43)
                at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
                at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
                at java.util.Iterator.forEachRemaining(Iterator.java:116)
                at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
                at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
                at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
                at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
                at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
                at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
                at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
                at org.junit.vintage.engine.VintageTestEngine.executeAllChildren(VintageTestEngine.java:82)
                at org.junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:73)
                at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:229)
                at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:197)
                at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:211)
                at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:191)
                at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:137)
                at org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java:89)
                at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
                at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
                at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
                at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
                at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
 
Rakesh
  • 235
  • 2
  • 10

2 Answers2

1

Add drools-mvel to your maven project (if maven):

<dependency>
   <groupId>org.drools</groupId>
   <artifactId>drools-mvel</artifactId>
   <version>${drools.version}</version>
</dependency>
Alex
  • 11
  • 2
  • Thanks for the response. however this solution works if using drools independently without Kogito. Since we are also using Kogito, adding this POM dependency complaints of class conflicts which means Kogito might be using custom parsing/loading mechanism for DRL resources. – Rakesh Jun 03 '21 at 19:00
0

If you are developing for Kogito you should test the generated REST endpoint and treat your service as a blackbox. For instance using Quarkus, you would use RestAssured.

source: I am a Kogito dev :-)

Edoardo Vacchi
  • 1,284
  • 10
  • 18