Spring Web Flow - Comment puis-je configurer un test unitaire avec des valeurs déjà dans conversationScope?

StackOverflow https://stackoverflow.com/questions/804326

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?

Était-ce utile?

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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top