【问题标题】:In Spring Webflow unit test, how do you assert that a view state has a view of a given name?在 Spring Webflow 单元测试中,如何断言视图状态具有给定名称的视图?
【发布时间】:2009-04-28 14:51:22
【问题描述】:

我正在开发一个 Spring webflow,尝试使用 TDD,所以我扩展了 AbstractXmlFlowExecutionTests。我看不到一种明显的方法来断言我认为是一件简单的事情:视图状态具有给定名称的关联视图。例如,给定这个流程(摘录):

<?xml version="1.0" encoding="UTF-8"?>
<flow ...>
    ...
    <view-state id="foo" view="barView">
    </view-state>
</flow>

和单元测试

public void testAssertFooStateHasBarView() {
    ...
    assertCurrentStateEquals("foo");
    assertTrue( getFlowDefinition().getState("confirmation").isViewState());
    // Surely there's an easier way...?
    ViewState viewState = (ViewState)getFlowDefinition().getState("foo");
    View view = viewState.getViewFactory().getView(new MockRequestContext());
    // yuck!
    assertTrue(view.toString().contains("barView"));
}

有没有更简单的方法来断言状态foo 具有视图barView

【问题讨论】:

    标签: java spring unit-testing spring-mvc spring-webflow


    【解决方案1】:

    你可以用这个:

    assertResponseWrittenEquals("barView", context);
    

    context 是你的MockExternalContext

    无论如何我都是这样测试的。

    【讨论】:

    • 谢谢!你不知道这清理了多少丑陋的代码。
    【解决方案2】:

    如果您实际上是在发送事件信号,则可以通过此方法获取 ViewSelection 并检查名称:

    assertViewNameEquals("Your View Name", applicationView(viewSelection));
    

    【讨论】:

      【解决方案3】:

      我无法谈论您的其余测试,或者如何使用 Webflow,但是您为什么要使用 contains() 来测试相等性?我确定您不希望“barViewBlah”的视图与您的测试相匹配,是吗?

      assertEquals("barView", view.toString());
      

      【讨论】:

      • 我同意这很糟糕,这就是为什么我正在寻找更好的方法。在这种情况下, View 对象的 toString 是 [MockViewFactoryCreator.MockView@1b0889a viewId = 'barView'] 所以我不能直接比较,也没有(明显的)API 来检索那个 'barView' 值。
      • 如果你投射到 MockView,它会给你一个 viewName 的访问器吗?
      • 不是一个选项 - MockView 是 MockViewFactoryCreator 的一个内部类,它只对包可见。我可以使用反射,但效果大致相同。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多