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中。

这是测试网络流程。