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