在我的Wicket應用程序中,我使用了一個帶有「yes」和「no」選項的單選按鈕。如果我選擇「否」,我應該顯示一個下拉選項。我使用AjaxFormChoiceComponentUpdatingBehavior
編寫代碼。如何使用WicketTester對此進行單元測試?如何在WicketTester中測試AjaxFormChoiceComponentUpdatingBehavior
回答
如果單選按鈕是在表單上我認爲你應該使用FormTester類:
http://wicket.apache.org/apidocs/1.4/org/apache/wicket/util/tester/FormTester.html
對於Ajax表單的一個實例提交測試,你可以看看:
嘗試這樣: tester.executeAjaxEvent("form:myRadioButtonId", "onchange");
這至少在Wicket 1.4中(我沒有用1.5試過),結果有些痛苦。
通過網絡搜索,我在Mischa Dasberg's blog中發現提示。基本上,您不能使用BaseWicketTester.executeAjaxEvent((String componentPath, String event)
方法,因爲您使用的行爲不是,並且您不能使用BaseWicketTester.executeBehavior(final AbstractAjaxBehavior behavior)
,因爲它會消除請求參數。
Mischa的解決方案是在父測試用例中實現他自己的executeBehavior
方法,該方法適用於他的情況,但不適合我的需要,因爲它假定請求參數id與完整組件路徑相同。
我已經做了通過在WicketTester
擴展實現我自己的executeAjaxBehavior
,但假設(如在我的情況是真實的),該請求參數是最後一個類似的東西「:」分隔的組件路徑的部分:
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
類中其他行爲測試方法的代碼,這可能值得一看。
解決方案檢票1.5.x的:
AbstractAjaxBehavior behavior = (AbstractAjaxBehavior)WicketTesterHelper.
findBehavior(getTester().getComponentFromLastRenderedPage("path:to:component"),
AjaxFormChoiceComponentUpdatingBehavior.class);
getTester().executeBehavior(behavior);
在Wicket 6中成功嘗試了這一點 – Sonata 2016-06-14 16:45:21
首先選擇你想要的單選按鈕。
form.select("path to radio button", 0/1)
然後執行AJAX行爲:
tester.executeBehavior((AbstractAjaxBehavior)tester.getComponentFromLastRenderedPage("path to radio buttons").getBehaviors().get(0));
這裏是我的一段代碼,這完全適用於我的選擇框,但應該菲亞特以及爲單選按鈕,如果你改變行爲類。所需的步驟是:
- 插入新值的形式(使用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);
我錯過了標準桿如何在以前的答案中更新表單值。
- 1. 如何使用WicketTester在部署模式下運行測試?
- 2. 檢票CheckBoxMultipleChoicePage&AjaxFormChoiceComponentUpdatingBehavior
- 3. 如何在mac中測試connectathon測試
- 4. WicketTester與休眠
- 5. Wicket RadioGroup,AjaxFormChoiceComponentUpdatingBehavior,表單提交?
- 6. 如何在WicketTester中設置http標題數據
- 7. 在Django中如何測試
- 8. 無法啓動WicketTester
- 9. 如何在Rspec中測試請求測試中的子域名(API測試)
- 10. 如何測試junit測試
- 11. Wicket(Java):如何使用wickettester來測試404是否重定向到正確頁面
- 12. 如何在Simulink測試中使用測試工具實現測試自動化?
- 13. Selenium junit測試 - 我如何按順序在測試中運行測試?
- 14. 如何在JUnit4儀器測試中測試領域知識庫?
- 15. 如何在測試設置方法中獲取測試類別
- 16. 如何在Rspec中測試測試用例
- 17. 如何測試Chosser已經在單元測試中推出?
- 18. 如何在測試中導入測試模塊?
- 19. 如何在Grails中設置功能測試的測試數據?
- 20. 如何在python中完成測試後刪除測試文件?
- 21. 如何在測試中創建測試對象?
- 22. 如何在測試用例中測試CLLocationManager的不同權限
- 23. 你如何決定在測試套件中測試什麼?
- 24. 如何在Ruby代碼中測試看似「無法測試」?
- 25. 如何在laravel中使用phpunit測試特定測試類
- 26. 在Golang的單元測試中,如何測試net.Conn?
- 27. 如何在android中編程測試測試環境
- 28. 如何在Android中測試單元測試?
- 29. 測試代碼 - 如何在測試環境中繞過線程
- 30. 如何在struts單元測試中測試文件上傳?
良好的直覺,但不幸的是,這不會工作,因爲AjaxFormChoiceComponentUpdatingBehavior不是一個AjaxEventBehavior。 – 2012-03-06 20:02:53