我正在开发一个使用 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
,并将其中一些复制并粘贴到单元测试中。
这是测试网络流程。
<?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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)