使用构造函数参数测试Wicket面板

使用构造函数参数测试Wicket面板,wicket,wicket-tester,Wicket,Wicket Tester,我得到了一个包含多个面板的页面,这些面板的构造函数中包含多个参数。 其中之一是一个菜单,它为菜单中的不同按钮提供一个列表 我尝试将其作为测试,但得到一个空指针异常。在虚拟页面上创建面板是可行的。 我对这种方法并不完全满意,因为它在我的测试中引入了很多新代码,并增加了出错的可能性 有没有更好的方法来测试在构造函数中接受参数的面板 当然可以: 给出空指针错误的代码: public void testVisitPanel(){ VisitPanel v = new VisitPanel("v

我得到了一个包含多个面板的页面,这些面板的构造函数中包含多个参数。 其中之一是一个菜单,它为菜单中的不同按钮提供一个列表

我尝试将其作为测试,但得到一个空指针异常。在虚拟页面上创建面板是可行的。 我对这种方法并不完全满意,因为它在我的测试中引入了很多新代码,并增加了出错的可能性

有没有更好的方法来测试在构造函数中接受参数的面板


当然可以: 给出空指针错误的代码:

public void testVisitPanel(){
    VisitPanel v = new VisitPanel("visitPanel");
    tester.startComponent(v);
    tester.assertContains("DATE");
}
专家组

public VisitPanel(String id) {
    super(id);
    add( new Label("visitDate", "DATE"));
    add( new Label("visitStage", "VISIT SIGNED"));
}
还有html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:wicket="http://wicket.sourceforge.net/" 
    xml:lang="en" 
    lang="en">  
<wicket:head>
</wicket:head>

<body>
    <wicket:panel>
        <span wicket:id="visitDate">VISIT DATE</span>
        <span wicket:id="visitStage">STAGE</span>
    </wicket:panel>
</body>
</html>

访问日期
阶段

如果您使用的是Wicket 1.4,您可能需要
wicketTester.startPanel

我要做的是在测试中创建
ITestPanelSource
的实现,执行如下操作:

private class TestPanelSource implements ITestPanelSource {

    private static final long serialVersionUID = 1L;

    public Panel getTestPanel(String panelId) {
        return new MyPanel(panelId, myArg1, myArg2);
    }

}
使用
myArgN
作为测试类(经常是模拟)中适合构造函数的字段,然后在测试或
setUp
方法中使用

wicketTester.startPanel(new TestPanelSource());
这基本上是为您完成一些DummyPage工作,因此可能与您现在所做的工作相差不远,但至少可以节省测试基础架构中虚拟页面的实现


在Wicket 1.5中,为了支持您在问题中引用的组件测试,这是不推荐的。这也应该行得通,所以可能值得发布一些实际的代码,这些代码会给您的技术带来麻烦。

谢谢!使用组件测试工作。然而,一些面板给了我一个空指针异常。稍微测试一下,我的面板使用只有Id的默认构造函数作为参数,这似乎不适用于组件测试。不过,使用startPanel确实有效(startPanel(Panel.class))。所以把这两者混合在一起,我就可以测试我所有的面板了。我很高兴这很有帮助。如果您在进行组件测试时发布一个给出空指针的示例代码,也许我们可以提供更多帮助。在问题中发布代码,因为我无法将其放在注释中。