Это оказывается несколько болезненным, по крайней мере, в Wicket 1.4 (я не пробовал с 1.5).
С помощью веб-поиска я нашел подсказки в блоге Миши Дасберга ,По сути, вы не можете использовать метод BaseWicketTester.executeAjaxEvent((String componentPath, String event)
, потому что используемое вами поведение не является AjaxEventBehavior
, и вы не можете использовать BaseWicketTester.executeBehavior(final AbstractAjaxBehavior behavior)
, потому что он стирает параметры запроса.
Решением Миши было реализовать собственный метод executeBehavior
в родительском тестовом примере, который работал для его ситуации, но не для моей необходимости, поскольку предполагалось, что идентификатор параметра запроса совпадает с полным путем к компоненту.
Я сделал нечто подобное, реализовав собственный 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);
}
И его решение, и мое (на основе его) также предполагают, что поведение является первым (или единственным) в компоненте.
Это немного неуклюже, но что-то вроде этого может сработать для вас.
Возможно, было бы лучше, если бы идентификаторы и поведение были получены отдельно и переданы в качестве параметров, и, конечно, вам лучше было бы найти первое поведение, которое на самом деле было AjaxFormChoiceComponentUpdatingBehavior
, вместо того, чтобы беспечно предполагать, что оно было первымповедение, но это только начало.
Это также код, аналогичный тому, что находится внутри класса BaseWicketTester
для других методов тестирования поведения, которые, возможно, стоит изучить.