单元测试Wicket输入组件
我刚刚编写了我的第一个Wicket组件:)它包含一个带有一些输入字段的单元测试Wicket输入组件,wicket,wicket-tester,Wicket,Wicket Tester,我刚刚编写了我的第一个Wicket组件:)它包含一个带有一些输入字段的列表视图。现在我想单元测试一个选定的值是否进入模型 由于WicketTester.newFormTester(“myForm”)需要一个表单,我尝试动态创建一个表单: public void testDataBinding() { Model model = ... MyRadioComponent myRadioComponent = new MyRadioComponent (...); Form
列表视图
。现在我想单元测试一个选定的值是否进入模型
由于WicketTester.newFormTester(“myForm”)
需要一个表单,我尝试动态创建一个表单:
public void testDataBinding()
{
Model model = ...
MyRadioComponent myRadioComponent = new MyRadioComponent (...);
Form form = new Form("myForm", ...);
form.add(myRadioComponent);
WicketTester wicketTester = new WicketTester();
wicketTester.startComponentInPage(form);
// FormTester formTester = wicketTester.newFormTester("myForm");
// ...
}
现在,wicketTester.StartComponentPage(表单)的结果是:
Failed: Component [myForm] (path = [0:x]) must be applied to a tag of type [form],
not: '<span wicket:id="myForm" id="myForm3">'
失败:必须将组件[myForm](路径=[0:x])应用于[form]类型的标记,
不是:“”
你知道如何解决这个问题和/或如何以正确的方式测试这样的输入组件吗?我相信
startComponentPage
为其组件使用了
。Wicket检查表单
是否附加到
标记上,这就是您出现此错误的原因
您需要创建自己的测试页面,其中包含一个
。有关内联标记的示例,请参见org.apache.wicket.markup.html.form.NumberTextFieldTest
。否则,创建一个带有相关html标记文件的表单测试页面类。好的,详细来说,解决方案如下所示:
public FormTester createFormTester(Component c) {
final WicketTester wicketTester = new WicketTester();
final FormPage page = new FormPage(c);
wicketTester.startPage(page);
return wicketTester.newFormTester(page.getPathToForm());
}
private static class FormPage extends WebPage implements IMarkupResourceStreamProvider {
private final Form<Void> form;
private final Component c;
private FormPage(final Component c) {
this.c = c;
add(form = new Form<>("form"));
form.add(c);
}
public String getPathToForm() {
return form.getPageRelativePath();
}
@Override
public IResourceStream getMarkupResourceStream(MarkupContainer container, Class<?> containerClass) {
return new StringResourceStream(
"<html><body>"
+ "<form wicket:id='" + form.getId() + "'><span wicket:id='" + c.getId() + "'/></form>"
+ "</body></html>");
}
}
公共FormTester createFormTester(组件c){
最终芯板芯板=新芯板();
最终格式页=新格式页(c);
wicketTester.起始页(第页);
返回wicketTester.newFormTester(page.getPathToForm());
}
私有静态类FormPage扩展网页实现IMarkupResourceStreamProvider{
私人最终形式;
私人最终部分c;
专用表单页(最终组件c){
这个.c=c;
添加(表格=新表格(“表格”);
表格.加入(c);
}
公共字符串getPathToForm(){
返回表单.getPageRelativePath();
}
@凌驾
公共IResourceStream getMarkupResourceStream(MarkupContainer容器,类containerClass){
返回新的StringResourceStream(
""
+ ""
+ "");
}
}