Spring Web Flow: ¿cómo puedo configurar la prueba unitaria con valores que ya están en conversación?

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

Pregunta

Estoy trabajando en un proyecto usando Spring Web Flow 2.0.

Estoy intentando realizar una prueba unitaria de un flujo que comienza con un estado de decisión. El estado de decisión verifica el valor de un objeto que está en conversationScope . No puedo entender cómo insertar un valor en el conversationScope para la prueba unitaria.

Lo he intentado:

getConversationScope().put("someName", value);
MockExternalContext context = new MockExternalContext();
startFlow(context);

Sin embargo, parece que cuando llamo a startFlow (contexto) el valor se borra.

También lo intenté:

MockExternalContext context = new MockExternalContext();
setCurrentState("someDecisionState");
resumeFlow(context)

Pero la prueba falla con un error que me dice que no puedo reanudar desde un estado de decisión, solo desde un estado de vista.

¿Alguien sabe cómo puedo insertar valores simulados en el conversaciónScope para que pueda probar estos casos?

¿Fue útil?

Solución

No es obvio, pero se me ocurrió esto:

public void testFoo() {
    FlowExecution flowExecution = getFlowExecutionFactory().createFlowExecution(getFlowDefinition());
    updateFlowExecution(flowExecution);
    flowExecution.getConversationScope().put("fooBar", "goo");
    flowExecution.start(null, new MockExternalContext());        
    assertCurrentStateEquals("fooView");
}

Tuve que profundizar en el AbstractXmlFlowExecutionTests.startFlow () para ver cómo estaba instanciando FlowExecution , y copiar y pegar algo de eso en la prueba de la unidad.

Aquí está el flujo web de prueba.

<?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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top