Spring Web Flow – 如何使用conversationScope中已有的值设置unit testing?
我正在使用Spring Web Flow 2.0开发一个项目。
我试图对以决策状态开始的流进行unit testing。 决策状态检查conversationScope
上的对象的值。 我无法弄清楚如何将值插入conversationScope
进行unit testing。
我试过了:
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
,并将其中的一部分复制并粘贴到unit testing中。
这是测试网络流程。