Domanda

Sto lavorando a un progetto utilizzando Spring Web Flow 2.0.

Sto provando a testare un'unità un flusso che inizia con uno stato decisionale. Lo stato decisionale controlla il valore di un oggetto che si trova su conversationScope . Non riesco a capire come inserire un valore in conversationScope per l'unità di test.

Ho provato:

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

Tuttavia, quando chiamo startFlow (contesto) sembra che il valore sia cancellato.

Ho anche provato:

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

Ma il test fallisce con un errore che mi dice che non posso riprendere da uno stato di decisione, solo da uno stato di visualizzazione.

Qualcuno sa come posso inserire valori fittizi in conversationScope in modo da poter testare questi casi?

È stato utile?

Soluzione

Non è ovvio, ma ho pensato a questo:

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

Ho dovuto scavare nel sottostante AbstractXmlFlowExecutionTests.startFlow () per vedere come stava istanziando il FlowExecution e copiarlo e incollarlo nel test unitario.

Ecco il flusso web di 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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top