Spring Web Flow-すでにconversationScopeにある値を使用して単体テストを設定するにはどうすればよいですか?
-
03-07-2019 - |
質問
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>
所属していません StackOverflow