Spring Web Flow – как настроить модульный тест со значениями, уже находящимися в разговоре?

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

Вопрос

Я работаю над проектом, используя Spring Web Flow 2.0.

Я пытаюсь выполнить модульное тестирование потока, который начинается с состояния решения.Состояние решения проверяет значение объекта, находящегося на conversationScope.Я не могу понять, как вставить значение в conversationScope для модульного теста.

Я пытался:

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

Однако кажется, что когда я звоню startFlow(context) значение очищается.

Я также попробовал:

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

Но тест завершается неудачно с ошибкой, сообщающей мне, что я не могу возобновить работу из состояния решения, а только из состояния просмотра.

Кто-нибудь знает, как я могу вставить фиктивные значения в conversationScope чтобы я мог проверить эти случаи?

Это было полезно?

Решение

Это не очевидно, но я придумал следующее:

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

Мне пришлось копаться в основе AbstractXmlFlowExecutionTests.startFlow() чтобы увидеть, как он создавал экземпляр FlowExecution, а также скопируйте и вставьте часть этого в модульный тест.

Вот тестовый веб-поток.

<?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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top