32
Testen von CMMN Modellen ohne Pein CMMN Erweiterung von camunda-bpm-assert @holisticon

Testen von CMMN Modellen

Embed Size (px)

Citation preview

TestenvonCMMNModellenohnePein

CMMNErweiterungvoncamunda-bpm-assert@holisticon

Agenda■ CaseManagement■ CMMN■ Wietestetmandas?■ F.A.C.T

CaseManagement

CaseManagement BusinessProcessManagement

AblaufergibtsichzurAusführungszeit

AblaufwirdzurDesignzeitfestgelegt

SchwachstrukturierteProzesse

StarkstrukturierteProzesse

Wissensarbeit RoutinearbeitBenutzerwirdunterstützt Benutzerwird

eingeschränkt... ...CMMNCaseManagementModelandNotation

BPMNBusinessProcessModelandNotation

CMMN

Models

Callhierarchy

Scenarios

SelectedModel Startnew Savechanges

CamundaPlay CamundaTools

1. completeA->completeB2. completeA->startC->completeC->completeB3. completeA->startC->completeB->completeC4. startC->completeA->completeB->completeC5. startC->completeA->completeC->completeB6. startC->completeC->completeA->completeB

NatürlicherAnsatzeinesgutenEntwicklers...Testen!

Szenario

WhenanewcaseinstanceiscreatedThenthehumantask"TaskA"isstarted.

Akzeptanztest1

@Test@Deployment(resources={"our_little_case.cmmn"})publicvoidtaskA_isStarted_CamundaApi(){//GIVEN

//WHENanewcaseinstanceiscreatedCaseInstancecaseInstance=processEngine().getCaseService().createCaseInstanceByKey(OUR_LITTLE_CASE);

//THENthehumantask"TaskA"isstarted.CaseExecutioncaseExecution=processEngine().getCaseService().createCaseExecutionQuery().activityId(TASK_A).singleResult();assertThat(caseExecution.isActive()).isTrue();}

GedankenzurAPI//THENthehumantask"TaskA"isstarted.CaseExecutioncaseExecution=processEngine().getCaseService().createCaseExecutionQuery().activityId(TASK_A).singleResult();assertThat(caseExecution.isActive()).isTrue();

assertThat(caseInstance).humanTask(TASK_A).isActive();

GedankenzuAssertionErrorsorg.junit.ComparisonFailure:Expected:trueActual:false

atsun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeMethod)atsun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)atsun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)atorg.camunda.bpm.engine.test.assertions.examples.seacon.ExampleStep1CaseTest.taskCreateInvoiceIsActive_CamundaApi(ExampleStep1CaseTest.java:43)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)...

java.lang.AssertionError:ExpectedhumanTask{id='a033ba13-15e4-11e6-8bee-5ecd9de0cc24',activityId='HT_TASK_A'}tobeinstate'enabled',butfoundittobe'active'!

F.A.C.T.FrameworkforAwesomeCaseTesting

CMMNErweiterungvoncamunda-bpm-assert

WhenanewcaseinstanceiscreatedThenthehumantask"TaskA"isstarted.

Akzeptanztest1

@Test@Deployment(resources={"our_little_case.cmmn"})publicvoidtaskA_isStarted(){//GIVEN

//WHENanewcaseinstanceiscreatedCaseInstancecaseInstance=caseService().createCaseInstanceByKey(OUR_LITTLE_CASE);

//THENthehumantask"TaskA"isstarted.assertThat(caseInstance).humanTask(TASK_A).isActive();}

Szenario

WhenanewcaseinstanceiscreatedThenthehumantask"TaskB"isnotstarted.

Akzeptanztest2

@Test@Deployment(resources={"our_little_case.cmmn"})publicvoidtaskB_isNotStarted(){//GIVEN

//WHENanewcaseinstanceiscreatedCaseInstancecaseInstance=caseService().createCaseInstanceByKey(OUR_LITTLE_CASE);

//THENthehumantask"TaskB"isnotstarted.assertThat(caseInstance).humanTask(TASK_B).isAvailable();}

Szenario

GivenanewcaseinstanceiscreatedWhenthehumantask"TaskA"iscompletedThenthehumantask"TaskB"isstarted.

Akzeptanztest3

@Test@Deployment(resources={"our_little_case.cmmn"})publicvoidtaskA_completed_taskB_isStarted(){//GIVENanewcaseinstanceiscreatedCaseInstancecaseInstance=caseService().createCaseInstanceByKey(OUR_LITTLE_CASE);

//WHENthehumantask"TaskA"iscompletedcomplete(caseExecution(TASK_A,caseInstance));

//THENthehumantask"TaskB"isstarted.assertThat(caseInstance).humanTask(TASK_B).isActive();}

Szenario

GivenanewcaseinstanceiscreatedAndthehumantask"TaskA"iscompletedWhenthehumantask"TaskB"iscompletedThenthecaseinstanceiscompleted.

Akzeptanztest4

@Test@Deployment(resources={"our_little_case.cmmn"})publicvoidtaskA_completed_taskB_completed_caseInstance_completed(){//GIVENanewcaseinstanceiscreated//ANDthehumantask"TaskA"iscompletedCaseInstancecaseInstance=caseService().createCaseInstanceByKey(OUR_LITTLE_CASE);complete(caseExecution(TASK_A,caseInstance));

//WHENthehumantask"TaskB"iscompletedcomplete(caseExecution(TASK_B,caseInstance));

//THENthecaseinstanceiscompleted.assertThat(caseInstance).isCompleted();}

Szenario

Zusammenfassung■ CaseManagementermöglichtsehrflexibleArbeitsabläufe

■ CMMNModellewerdensehrschnellkomplex■ Testsmüssenleichtverständlichsein■ BDDeignetsichauchfürCMMNTests

Abervorallem:■ AuchCasessindtrotzihrerKomplexitättestbar

https://github.com/camunda/camunda-bpm-assert/blob/cmmn_assertions/camunda-bpm-

assert/User_Guide_CMMN.md

<dependency><groupId>org.camunda.bpm.extension</groupId><artifactId>camunda-bpm-assert</artifactId><version>2.0-alpha1</version></dependency>

Machtmit!Schreibtunseinfachan!

[email protected]@[email protected]

https://github.com/camunda/camunda-bpm-assert

ENDE