Spring Web Flow - Comment puis-je configurer un test unitaire avec des valeurs déjà dans conversationScope?
-
03-07-2019 - |
Question
Je travaille sur un projet utilisant Spring Web Flow 2.0.
J'essaie de tester à l'unité le flux qui commence par un état de décision. L'état de décision vérifie la valeur d'un objet se trouvant sur conversationScope
. Je n'arrive pas à comprendre comment insérer une valeur dans conversationScope
pour le test unitaire.
j'ai essayé:
getConversationScope().put("someName", value);
MockExternalContext context = new MockExternalContext();
startFlow(context);
Cependant, il semble que lorsque j'appelle startFlow (context)
, la valeur soit effacée.
J'ai aussi essayé:
MockExternalContext context = new MockExternalContext();
setCurrentState("someDecisionState");
resumeFlow(context)
Mais le test échoue avec une erreur m'indiquant que je ne peux pas reprendre à partir d'un état de décision, mais à partir d'un état d'affichage.
Quelqu'un sait-il comment insérer des valeurs factices sur conversationScope
afin de pouvoir tester ces cas?
La solution
Ce n'est pas évident, mais j'ai proposé ceci:
public void testFoo() {
FlowExecution flowExecution = getFlowExecutionFactory().createFlowExecution(getFlowDefinition());
updateFlowExecution(flowExecution);
flowExecution.getConversationScope().put("fooBar", "goo");
flowExecution.start(null, new MockExternalContext());
assertCurrentStateEquals("fooView");
}
J'ai dû explorer le AbstractXmlFlowExecutionTests.startFlow ()
sous-jacent pour voir comment il instanciait FlowExecution
, puis en copier et coller une partie dans le test unitaire.
Voici le flux Web de test.
<?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>