1

这类似于Spring Web Flow - 如何使用对话范围中已有的值设置单元测试?

我已经使用该问题中列出的解决方案来解决会话范围问题,但一直试图为 FlowScope 做同样的事情。出于某种原因,FlowExecution 没有 getFlowScope() 方法。

任何指向正确方向的帮助或一般性指示将不胜感激。谢谢!

更新:

为了提供更多上下文,这是我要测试的 webflow 中的行:

<evaluate expression="serviceFactory.getInstance(flowScope.config.country).startTransaction(flowScope.SomeList.get(0), 0)" />

相关的测试语句是:

EasyMock.expect(serviceObjectMock.startTransaction(someObjectMock, 0)).andReturn(true);

它默默地失败了。当我浏览调试器中的代码时,我看到此调用中有一个 IndexOutOfBoundsException,这导致我假设我必须以某种方式在 flowScope 中拥有该列表。

4

2 回答 2

0

在 中FlowExecution,您可以使用getActiveSession().getScope()
它将为您提供 FlowScope,然后您可以在其中放置您的属性(在流程开始后)

您尝试执行的操作实际上没有任何意义,因为 Flow 范围属性存在于活动流会话的生命周期中。您不能在流程开始之前设置它们。

于 2012-09-27T15:12:22.427 回答
0

对于任何感兴趣的人,我了解到我不必在 flowScope 中显式设置属性,因为 EasyMock 在遍历“期望”列表时会处理该属性。

我的问题是“flowScope.SomeList.get(0)”指的是在上一行中设置的属性,我在该行的“expect”语句中使用“new ArrayList()”作为返回值。

而且,“静默失败”部分是由于我没有在 Spring 的测试配置文件中启用 DEBUG 级别信息。

这在测试 log4j.xml 文件中解决了这个问题:

    <logger name="org.springframework">
    <level value="DEBUG" />
</logger>
于 2012-09-28T23:14:59.093 回答