1

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

我试图将它作为组件进行测试,但得到一个空指针异常。使用虚拟页面并在虚拟页面上创建面板有效。我对这种方法并不完全满意,因为它在我的测试中引入了很多新代码,并且有更多的错误可能性。

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


肯定的事情:给出空指针错误的代码:

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>
4

1 回答 1

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

于 2011-10-14T21:43:00.197 回答