【问题标题】:unit-testing Wicket input components单元测试 Wicket 输入组件
【发布时间】:2014-06-01 23:17:59
【问题描述】:

我刚刚编写了我的第一个 Wicket 组件 :) 它包含一个 ListView 和一些 Radio 输入字段。现在我想对选定的值是否进入模型进行单元测试。

由于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.startComponentInPage(form) 结果:

Failed: Component [myForm] (path = [0:x]) must be applied to a tag of type [form], 
        not: '<span wicket:id="myForm" id="myForm3">'

知道如何解决这个问题和/或如何以正确的方式测试这样的输入组件吗?

【问题讨论】:

    标签: wicket wicket-tester


    【解决方案1】:

    好的,详细的解决方案现在看起来像这样:

    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>");
        }
    }
    

    【讨论】:

      【解决方案2】:

      我相信startComponentInPage 使用&lt;span&gt; 作为其组件。 Wicket 检查 Forms 是否附加到 &lt;form&gt; 标签,这就是您收到此错误的原因。

      您需要创建自己的测试页面,其中包含&lt;form&gt;。有关内联标记的示例,请参阅 org.apache.wicket.markup.html.form.NumberTextFieldTest。否则,使用关联的 html 标记文件创建一个 Form 测试页类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-02
        • 1970-01-01
        • 2022-01-03
        • 2011-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多