3

シンプルな Spring Webflow の単体テストを試みています。これまでのところ、状態間の遷移を確認し、リクエスト、フラッシュ、ビュー、およびフロー スコープ内の変数を確認できます。

どういうわけか、レンダリング時のアクションが実行されていることを確認できません。Web アプリケーションで Webflow を実行すると、select にそのアクションの結果が取り込まれていることがわかるので、定義は問題ないはずです。Spring Webflow を介してデバッグすると、イベント リスナーがないことがわかりますが、リスナーの配列が入力されていない理由がよくわかりません。

私はコードを掘り下げ続けますが、誰かが同じ問題に直面し、どのように解決されたのだろうか.

これが関連する場合、Mockito でサービスをモックし、configureFlowBuilderContext() をオーバーライドしてモック サービスを Bean として登録することで注入します。

4

1 に答える 1

0

今日、恐ろしいレガシー Spring Web Flow アプリの新機能のテストを作成しようとしているときに、この問題に遭遇しました。私は Spring Web Flow を専門的に理解しているふりをしているわけではありませんが、コードに飛び込むと、とから呼び出される から<on-render>トリガーされるように見えました。そこには厄介なネストされたブロックがいくつかありますが、すべてがとの属性に依存しているように見えました。ViewState.render(...)ViewState.resume(...)ViewState.doEnter(...)if-elseresponseAllowedresponseCompleteExternalContext.

テストで最初の<on-render>ブロックのみが実行される理由はMockExternalContext、Spring のデフォルトが aanull responseAllowedでありresponseComplete、最初の応答後に false に戻らないためです。そこで<on-render>、独自のExternalContext interface.

MockExternalContext次の2つの変更を加えて、文字通り既存のものをコピーして貼り付けました。

  • responseAllowedデフォルトを true に設定します。

    private Boolean responseAllowed = true;

  • 関数を上書きしてrecordResponseComplete、応答を完了に設定しないようにします。

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

これは恐ろしいハックであり、おそらく副作用がありますが、Spring Web Flow はとにかく恐ろしいフレームワークであり、このソリューションは私にとってはうまくいきました。YMMV。

于 2018-09-05T09:48:08.523 に答える