2012-06-22 16 views
0

我试图找到在Spring WebFlow上下文中单元测试决策状态的最佳方法。如何在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. someClasssomeClassDao不在FlowScope或ConversationScope内。

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

通常,一个可以简单地

  1. setCurrentState(someViewState:其中要在过渡流内槽试验)
  2. 定义输入
  3. 模拟一个的ExternalContext该上下文中
  4. SetEvent的
  5. resumeFlow(给定上下文)
  6. 验证模拟方法调用& fina LLY
  7. assertCurrentState(someViewState:在这里你会想到是在给定输入后,影响了决策状态叉,流内)

似乎决定国家不作为操作视图状态(足够公平:它们不是一个流中的给定状态),所以我们如何模拟/测试?

谢谢你的回应。

回答

0

好了,我已经把在正确的方向谁提醒我,这个过程是一个同事(古老的默里·麦克弗森):
1.模拟你的DAO调用
2.开始你的流量&(现这是关键)
3.根据您的嘲笑电话设置的决策结果,断言您的预期结果状态(这将是一些看法),
- 无论是结束状态(在这种情况下,你也会期待结束于您的流程)或
- (临时)当前状态。如果它已经到达交易点,那么你知道决定已经被执行。


N.B.如果您的预期结果是'currentState',那么您可以验证模拟的(dao)呼叫是否已经进行(否则流程将不再有效),您无法进行此类验证:您已经完成的简单事实到达您预期的最终状态本身就是验证。

0

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

相关问题