【问题标题】:How to go about testing decision-state in Spring WebFlow如何在 Spring WebFlow 中测试决策状态
【发布时间】:2012-06-29 21:43:46
【问题描述】:

我正在尝试找到在 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>...

注意someClasssomeClassDao 不在 FlowScope 或 ConversationScope 内。

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

通常情况下,我们可以简单地

  1. setCurrentState(someViewState: 您希望在过渡流中进行插槽测试的位置)
  2. 定义输入
  3. 模拟 ExternalContext
  4. 在该上下文中设置事件
  5. resumeFlow(带有给定上下文)
  6. 验证模拟方法调用并最终验证
  7. assertCurrentState(someViewState: 在给定的输入影响了流中要分叉到的决策状态之后,您期望处于的位置)

似乎决策状态不作为视图状态运行(很公平:它们不是流程中的给定视图状态)那么我们如何模拟/测试?

感谢您的回复。

【问题讨论】:

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


    【解决方案1】:

    嗯,我的一位同事(可敬的默里·麦克弗森)提醒我这个过程是:
    1. 模拟你的 dao 调用
    2. 开始你的流程 &(现在这是关键)
    3.根据您的模拟调用设置的决策结果,断言您的预期结果状态(这将是一些观点),
    - 是否是结束状态(在这种情况下,您也会期望结束您的流程)或
    - (临时)当前状态。如果它已经到达预期点,那么您就知道已经执行了这些决定。


    注意如果您的预期结果是“currentState”,那么您可以验证已/已经进行了模拟(dao)调用,否则(因为流程将不再处于活动状态)您无法进行此类验证:您已经到达您预期的最终状态本身就是验证。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2012-08-13
        • 1970-01-01
        • 2021-03-19
        • 1970-01-01
        • 2017-11-30
        • 1970-01-01
        • 2016-07-26
        • 2019-03-14
        • 2016-11-08
        相关资源
        最近更新 更多