【问题标题】:Testing Wicket panels with constructor arguments使用构造函数参数测试 Wicket 面板
【发布时间】:2011-12-07 20:14:38
【问题描述】:

我有一个页面,其中包含多个面板,它们在其构造函数中采用多个参数。 其中之一是一个菜单,其中包含菜单中不同按钮的列表。

我尝试将其作为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>

【问题讨论】:

    标签: wicket wicket-tester


    【解决方案1】:

    如果您使用的是 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))。所以混合这两个我可以测试我所有的面板。
    • 我很高兴这对您有所帮助。如果您发布一个在进行组件测试时给出空指针的示例代码,也许我们可以提供更多帮助。
    • 在问题中发布代码,因为我无法将其放入评论中。
    猜你喜欢
    • 1970-01-01
    • 2017-07-27
    • 2023-01-30
    • 2019-04-20
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多