Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单元测试Wicket输入组件_Wicket_Wicket Tester - Fatal编程技术网

单元测试Wicket输入组件

单元测试Wicket输入组件,wicket,wicket-tester,Wicket,Wicket Tester,我刚刚编写了我的第一个Wicket组件:)它包含一个带有一些输入字段的列表视图。现在我想单元测试一个选定的值是否进入模型 由于WicketTester.newFormTester(“myForm”)需要一个表单,我尝试动态创建一个表单: public void testDataBinding() { Model model = ... MyRadioComponent myRadioComponent = new MyRadioComponent (...); Form

我刚刚编写了我的第一个Wicket组件:)它包含一个带有一些输入字段的
列表视图
。现在我想单元测试一个选定的值是否进入模型

由于
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(
""
+ ""
+ "");
}
}