8

私の Wicket アプリケーションでは、「はい」と「いいえ」のオプションを持つラジオ ボタンを 1 つ使用しました。「いいえ」を選択すると、ドロップダウンの選択肢が 1 つ表示されます。を使ってコードを書きAjaxFormChoiceComponentUpdatingBehaviorました。WicketTester を使用してこれを単体テストするにはどうすればよいですか?

4

6 に答える 6

5

Wicket 1.5.x の解決策:

 AbstractAjaxBehavior behavior = (AbstractAjaxBehavior)WicketTesterHelper.
          findBehavior(getTester().getComponentFromLastRenderedPage("path:to:component"),
                        AjaxFormChoiceComponentUpdatingBehavior.class);
 getTester().executeBehavior(behavior);
于 2012-08-02T10:13:46.403 に答える
1

これは私のコードで、選択ボックスで完全に機能しますが、Behavior クラスを変更すると、ラジオ ボタンでも同様に動作するはずです。必要な手順は次のとおりです。

  • フォームに新しい値を挿入する (FormTester を使用)
  • 行動を見つける
  • 変更時に動作を実行する

コードの例を次に示します。

//simulate insert new value
FormTester formTester = tester.newFormTester(PANEL_ID + FORM); 
formTester.setValue("selectBox", "newValue");
//Find onchange behaviour
AjaxFormComponentUpdatingBehavior behavior = 
       (AjaxFormComponentUpdatingBehavior) WicketTesterHelper.findBehavior(
       tester.getComponentFromLastRenderedPage(PANEL_ID + FORM + ":" + "selectBox"), 
       ajaxFormComponentUpdatingBehavior.class);
//execute onchange
tester.executeBehavior(behavior);

以前の回答でフォームの値を更新する方法を見逃しました。

于 2016-06-23T14:13:26.540 に答える
0

ラジオボタンがフォーム上にある場合は、FormTesterクラスを使用する必要があると思います。

http://wicket.apache.org/apidocs/1.4/org/apache/wicket/util/tester/FormTester.html

Ajaxフォーム送信テストの例については、以下をご覧ください。

http://www.java2s.com/Open-Source/Java-Document/J2EE/wicket-1.4/org/apache/wicket/ajax/form/AjaxFormSubmitTest.java.htm

于 2011-10-29T10:47:51.707 に答える
0

これは、少なくとも Wicket 1.4 (1.5 では試していません) では、多少の苦痛を伴います。

ウェブ検索で、Mischa Dasberg のブログにヒントが見つかりました。基本的に、使用してBaseWicketTester.executeAjaxEvent((String componentPath, String event)いる動作が ではないためメソッドを使用できず、リクエスト パラメータが消去されるため をAjaxEventBehavior使用できません。BaseWicketTester.executeBehavior(final AbstractAjaxBehavior behavior)

Mischa の解決策はexecuteBehavior、親テスト ケースに独自のメソッドを実装することでした。これは、彼の状況では機能しましたが、要求パラメーター ID が完全なコンポーネント パスと同じであると想定していたため、私のニーズには対応していませんでした。

executeAjaxBehaviorの拡張子に独自のものを実装することで同様のことを行いましたWicketTesterが、(私の場合もそうですが) リクエスト パラメータがコンポーネント パスの最後の ":" で区切られたセクションであると仮定します。

public void executeAjaxBehavior(String path, String value) {
    AbstractAjaxBehavior behavior = (AbstractAjaxBehavior) getComponentFromLastRenderedPage(path).getBehaviors().get(0);
    CharSequence url = behavior.getCallbackUrl(false);
    WebRequestCycle cycle = setupRequestAndResponse(true);
    getServletRequest().setRequestToRedirectString(url.toString());
    String[] ids = path.split(":");
    String id = ids[ids.length-1];
    getServletRequest().setParameter(id, value);
    processRequestCycle(cycle);
}

彼の解決策と私の (彼に基づく) 両方とも、動作がコンポーネントの最初の (または唯一の) 動作であると想定しています。

これは少し不格好ですが、このようなものがうまくいくかもしれません。

ID と動作が別々に取得され、パラメーターとして渡された方がよい場合があります。もちろん、最初の動作であるAjaxFormChoiceComponentUpdatingBehaviorと軽々しく想定するのではなく、実際にあった最初の動作を見つける方がよい場合もありますが、これは始まりです。

これは、他の動作テスト メソッドのクラス内にあるものと同様のコードでBaseWicketTesterあり、調べる価値があるかもしれません。

于 2012-03-06T20:27:11.430 に答える
0

次のようなことを試してください: tester.executeAjaxEvent("form:myRadioButtonId", "onchange");

于 2012-01-29T16:56:43.363 に答える