Spring Web Flow - Como posso configurar teste de unidade com os valores já conversationScope?

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

Pergunta

Eu estou trabalhando em um projeto usando Spring Web Flow 2.0.

Eu estou tentando unidade testar um fluxo que começa com um estado de decisão. O estado decisão verifica o valor de um objeto que está no conversationScope. Eu não consigo descobrir como inserir um valor para o conversationScope para o teste de unidade.

Eu tentei:

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

No entanto, parece que quando eu chamo startFlow(context) o valor está desmarcada.

Eu também tentei:

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

Mas o teste falhar com um erro dizendo que eu não posso retomar de um estado de decisão, apenas a partir de um estado de exibição.

Alguém sabe como posso inserir valores simulados na conversationScope para que eu possa testar estes casos?

Foi útil?

Solução

Não é óbvio, mas eu vim com essa:

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

Eu tive que escavar o AbstractXmlFlowExecutionTests.startFlow() subjacente para ver como ele foi instanciar o FlowExecution, e copiar e colar alguns dos que para o teste de unidade.

Aqui está um fluxo de ensaio web.

<?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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top