如何在Spring WebFlow中测试决策状态

时间:2012-06-22 06:58:59

标签: unit-testing mockito spring-webflow-2

我正试图找到在Spring WebFlow上下文中单元测试决策状态的最佳方法。

<var name="registration" class="*some class path*.Registration"/>

<decision-state id="checkSignedIn">
    <if test="*someClass*.isSignedOn(registration)"
        then="checkHas*Said*Service"
        else="registrationChoice"/>
</decision-state>

<decision-state id="checkHasTCloudService">
    <if test="*someClass*Dao.isUserRegisteredFor*saidSvc*(registration)"
        then="*svc*Activated"
        else="registrationChoice"/>
</decision-state>

<view-state id="registrationChoice" model="registration" view="view.xhtml" >

    <on-entry>...

N.B。 someClass someClassDao 不在FlowScope或ConversationScope中。

我想通过Mockito测试正在调用决策状态表达式,然后验证正确的状态结果。

通常,人们可以简单地

  1. setCurrentState(someViewState:您希望在过渡流程中进行插槽测试的地方)
  2. 定义输入
  3. 模拟一个ExternalContext
  4. 该上下文中的setEvent
  5. resumeFlow(具有给定的上下文)
  6. 验证模拟方法调用&amp;最后
  7. assertCurrentState(someViewState:在给定的输入影响决策状态到fork之后,在你的流程中你期望的位置)
  8. 似乎决策状态不作为视图状态运行(足够公平:它们不是流程中给定的状态)所以我们如何模拟/测试?

    感谢您的回复。

2 个答案:

答案 0 :(得分:0)

好吧,我被一位同事(尊敬的默里麦克弗森)推向了正确的方向,他提醒我这个过程是:
嘲笑你的dao电话
2.开始你的流动&amp; (现在这是症结)
3.根据模拟调用设置的决策结果,断言您的预期结果状态(这将是一些观点),
- 是否结束状态(在这种情况下,您也希望结束您的流程)或
- (临时)当前状态。如果它已到达预期点,那么您就知道已经执行了决定。


N.B。如果您的预期结果是'currentState',那么您可以验证已经/已经进行过模拟(dao)调用(因为流程将不再处于活动状态)您无法进行此类验证:您已经做过的简单事实到达你预期的最终状态本身就是验证。

答案 1 :(得分:0)

在这个确切的示例中,您可以选择通过 setCurrentState()从特定视图状态开始 - 您可以使用startFlow - 这将...启动流程。然后,由于您的决策结果,您可以测试最终的视图状态。