Features for DmnEngineRule

Hello community,

I would like to contribute some code to the DmnEngineRule and I would like to know if there is interest of doing so. Following features:

  • declarative approach for loading dmn resources
  • declarative approach for “deploying”/“activating” specific dmn rule
  • convenience methods for “evaluateDecision” and “evaluateDecisionTable”

Example unit test:

@DmnResource(resources = "/rule.dmn")
public class RptNttMatchClassicTest {

  public DmnEngineRule dmnEngineRule = new DmnEngineRule();

  @DmnDecisionKey(name = "rule-id")
  public void rptTTMatchClassicNormaliseProductsTest() {
    // given
    Map<String, Object> variables = new HashMap<String, Object>();
    // when
    DmnDecisionResult dmnDecisionResult = dmnEngineRule.evaluateDecision(variables);
    // then

My idea is highly inspired by the BPMN unit test support!

This is a really nice idea!
I think i’ll bring this up at the DMN question corner next week. might be a good point to start a discussion.

Hi @Niall,

as soon as you/your collegues agree with this feature idea, I could contribute code for it on github.com.

Hi @rfelgent,

good idea to invest into the DMN testing.

My thoughts on this:
@DmnResource() is similar to @Deployment(resources = "myDmnFile.dmn")

I think it is worth to improve is the assertions of the DmnDecisionResult.

I usually write

    DmnDecisionTableResult decisionTableResult = decisionService().evaluateDecisionTableByKey("tweetApproval", variables);
    assertThat(decisionTableResult.getFirstResult()).containsEntry("approved", true);

It wouild be nice if I could have an abstraction on decisionTableResult.getFirstResult() without knowledge about the internal structure of the DmnDecisionTableResult or DmnDecisionResult.

Maybe something that matches the hitpolicy or the result mapping like


Thank you, Ingo

1 Like

Hi @rfelgent,

don’t wait, just start with a proposal and prepare a pull request.

Thank you, Ingo

Hi Ingo,

I created a PR https://github.com/camunda/camunda-bpm-platform/pull/1080/.

FYI: there is similar functionality implemented via DmnEngineTestRule. Are you aware of it?!

Hi @rfelgent,

thank you for the heads up! I wasn’t aware of this hint: https://docs.camunda.org/manual/7.14/user-guide/dmn-engine/testing/. The last two sentebces sound interesting:

The DmnDecisionResult implements the interface List<DmnDecisionResultEntries> . Whereas the DmnDecisionResultEntries implements the interface Map<String, Object> . This allows you to use common List or Map asserts.

I will give it a try.

Thank you, Ingo