0

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. そのコンテキスト内の setEvent
  5. resumeFlow (与えられたコンテキストで)
  6. モックされたメソッド呼び出しを検証 & 最後に
  7. assertCurrentState(someViewState: フロー内で、指定された入力が fork する決定状態に影響を与えた後、どこにいると予想されるか)

デシジョン ステートはビュー ステートとして動作しないようです (公平に言えば、フロー内の特定のビュー ステートではありません)。

返信をお待ちしております。

4

2 に答える 2

0

さて、私は同僚 (由緒あるマレー マクファーソン) によって正しい方向に導かれました。彼はプロセスが次のとおりであることを思い出させてくれ まし た
。モック呼び出しによって設定された決定結果について、予想される結果の状態 (何らかのビューになります)、 - 終了状態 (この場合、フローの終了も予想される) または - (暫定的な) 現在の状態かどうかをアサートします。 . それが期待されるポイントに到達した場合、決定が実行されたことがわかります。




注意: 期待される結果が「currentState」の場合、モック (dao) 呼び出しが行われたことを確認できます。予想される最終状態に到達したこと自体が検証です。

于 2012-06-25T04:09:32.450 に答える
0

この正確な例では、setCurrentState()を介して特定のビュー ステートで開始する代わりに、 startFlowを使用できます。これにより、フローが開始されます。次に、決定状態の結果により、最終的にどのビュー状態になるかをテストできます。

于 2012-06-29T13:43:46.190 に答える