Spring Web Flow-すでにconversationScopeにある値を使用して単体テストを設定するにはどうすればよいですか?

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 をインスタンス化する方法を確認し、その一部を単体テストにコピーして貼り付ける必要がありました。

テスト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>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top