我有一个包含多个面板的页面,这些面板在其构造函数中包含多个参数。 其中一个是菜单,其中列出了菜单中不同按钮的列表。
我尝试将其测试为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>
答案 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中,不赞成使用您在问题中引用的组件测试。这也应该有效,所以发布一些给你带来麻烦的实际代码可能是值得的。