我正在使用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
,并将其中的一部分复制并粘贴到单元测试中.
这是测试网络流程.