3

我正在尝试对一个简单的 Spring Webflow 进行单元测试。到目前为止,我可以验证状态之间的转换并检查请求、闪存、视图和流范围中的变量。

不知何故,我无法验证是否执行了渲染操作。当我在我的 Web 应用程序中运行 webflow 时,我可以看到填充了该操作的结果的选择,因此定义必须没问题。当我通过 Spring Webflow 进行调试时,我可以看到没有事件侦听器,但我无法弄清楚为什么没有填充侦听器的数组。

我将继续深入研究代码,但我想知道是否有人遇到同样的问题以及如何解决。

如果这是相关的,我将使用 Mockito 模拟服务并通过覆盖 configureFlowBuilderContext() 并将模拟服务注册为 bean 来注入它。

4

1 回答 1

0

我今天早些时候在尝试为可怕的旧 Spring Web Flow 应用程序中的新功能编写测试时遇到了这个问题。我不假装对 Spring Web Flow 有专家的了解,但深入研究代码,<on-render>似乎触发了ViewState.render(...),它被调用 fromViewState.resume(...)ViewState.doEnter(...)。那里有一些讨厌的嵌套if-else块,但看起来这一切responseAllowedresponseComplete取决于ExternalContext.

在测试中只执行第一个<on-render>块的原因是因为MockExternalContextfrom Spring 默认为 aanull responseAllowed并且在第一个响应后永远不会变responseComplete回 false 。因此,我<on-render>通过编写自己的ExternalContext interface.

我从字面上复制粘贴了现有MockExternalContext的以下两个更改:

  • 设置responseAllowed为默认为 true:

    private Boolean responseAllowed = true;

  • 覆盖recordResponseComplete函数以从不将响应设置为完成:

    public void recordResponseComplete() { //responseComplete = true; (Yes, this is literally just commented out) }

Soooo 这是一个可怕的 hack,可能有副作用,但 Spring Web Flow 无论如何都是一个可怕的框架,这个解决方案对我有用。YMMV。

于 2018-09-05T09:48:08.523 回答