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

时间:2011-10-14 14:57:26

标签: wicket wicket-tester

我有一个包含多个面板的页面,这些面板在其构造函数中包含多个参数。 其中一个是菜单,其中列出了菜单中不同按钮的列表。

我尝试将其测试为components,但获得空指针异常。 Using a dummy page并在虚拟页面上创建面板。 我对这种方法并不完全满意,因为它在我的测试中引入了许多新代码,并且有更多的错误可能性。

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


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

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>

1 个答案:

答案 0 :(得分:3)

如果您使用的是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中,不赞成使用您在问题中引用的组件测试。这也应该有效,所以发布一些给你带来麻烦的实际代码可能是值得的。