Spring Web Flow - Wie kann ich einrichten Unit-Test mit Werten bereits in conversationScope?
-
03-07-2019 - |
Frage
Ich arbeite an einem Projekt mit Spring Web Flow 2.0.
Ich versuche, Unit-Test eine Strömung, die mit einem Entscheidungszustand beginnt. Der Entscheidungszustand überprüft den Wert eines Objekts, das auf dem conversationScope
ist. Ich kann nicht herausfinden, wie ein Wert in die conversationScope
für den Unit-Test einzufügen.
Ich habe versucht:
getConversationScope().put("someName", value);
MockExternalContext context = new MockExternalContext();
startFlow(context);
Es scheint jedoch, dass, wenn ich startFlow(context)
rufen wird der Wert gelöscht.
Ich habe auch versucht:
MockExternalContext context = new MockExternalContext();
setCurrentState("someDecisionState");
resumeFlow(context)
Aber der Test nicht mit einem Fehler mir zu sagen, dass ich nicht von einem Entscheidungszustand wieder aufgenommen werden kann, nur aus einer Sicht Zustand.
Wer weiß, wie ich Mock-Werte auf dem conversationScope
einfügen kann, so dass ich diese Fälle testen kann?
Lösung
Es ist nicht offensichtlich, aber ich kam mit dieser:
public void testFoo() {
FlowExecution flowExecution = getFlowExecutionFactory().createFlowExecution(getFlowDefinition());
updateFlowExecution(flowExecution);
flowExecution.getConversationScope().put("fooBar", "goo");
flowExecution.start(null, new MockExternalContext());
assertCurrentStateEquals("fooView");
}
Ich hatte in den darunter liegenden AbstractXmlFlowExecutionTests.startFlow()
zu graben, um zu sehen, wie sie die FlowExecution
wurden instanziiert wird, und kopieren und einige davon in den Unit-Test einfügen.
Hier ist der Test Web-Flow.
<?xml version="1.0" encoding="UTF-8"?>
<flow xmlns="http://www.springframework.org/schema/webflow"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/webflow
http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd">
<action-state id="decideFoo">
<evaluate expression="conversationScope.fooBar" />
<transition on="goo" to="fooView" />
<transition on="gar" to="barView" />
</action-state>
<view-state id="fooView" />
<view-state id="barView" />
</flow>