Wicket测试startPanel(Panel)和PageParameters - 如何设置它们?

时间:2010-02-08 12:09:20

标签: wicket

目前我正在使用WicketTester的startPanel方法来测试我的面板。在这些面板中,我经常使用PageParameters来访问数据,使用getPage()。getPageParameters()。但是,startPanel方法不初始化DummyPage的任何页面参数,也不提供设置页面参数的功能。

如何在面板测试期间设置页面参数?

3 个答案:

答案 0 :(得分:1)

这真的是这样做的吗? startPanel已经为我们创建了一个虚拟页面,但是没有任何页面参数。使用您的方法将面板附加到两页,这对我来说似乎不是最佳解决方案。现在我使用startPanel(Panel,PageParameters)函数扩展了WicketTester:

public Panel startPanel(final TestPanelSource testPanelSource, final PageParameters parameters) {
    return (Panel) startPage(new ITestPageSource() {
        public Page getTestPage() {
            return new DummyPanelPage(testPanelSource, parameters);
        }
    }).get(DummyPanelPage.TEST_PANEL_ID);
}

并使用页面参数constrctor

创建了一个新的虚拟面板页面
public class DummyPanelPage extends WebPage {

    /** 
     * The dummy <code>Panel</code> <code>Component</code> id.
     */
    public static final String TEST_PANEL_ID = "panel";

    /**
     * Default constructor.
     * @param testPanelSource <code>TestPanelSource</code>
     */
    public DummyPanelPage(final TestPanelSource testPanelSource, final PageParameters parameters) {
        super(parameters);
        add(testPanelSource.getTestPanel(TEST_PANEL_ID));
    }

}

它击败了我为什么这个功能不仅仅是由Apache提供的。

答案 1 :(得分:1)

我个人认为,通过PageParameters获取getPage().getPageParameters()是一种不理想的方式。

它引入了从您的面板到您的页面的依赖关系,这使得它们紧密耦合并且难以测试,如您所见。

如果您需要从PageParameters中访问Panel,请通过创建接受这些内容的构造函数来注入它们,这些内容与

一致。
private PageParameters params;

public MyPanel (String id, Model<T> model, PageParameters params) {
    super(id, model);
    this.params = params;
    ...
}

通过这种方式,您可以使用Parameters中的Panel,使用您在测试中可以想象的任何Panel构建PageParameters,并避免经过验证的耦合不利。

答案 2 :(得分:0)

您可以使用已创建页面和面板的TestPanelSource的匿名(或子类)。

final WebPage parameterPage = new WebPage(pageParmeters);
final Panel panelUnderTest = .... create panel here ....;
parameterPage.add(panelUnderTest);
wicketTester.startPanel(new TestPanelSource(){
    public Panel getTestPanel(final String panelId) {
        return panelUnderTest;
    }
});

如果你使用它很多,TestPanelSource的子类可能最好能够将参数传递给你的子类的构造函数和你感兴趣的其他可配置项。