2010-02-08 49 views
1

目前我正在使用WicketTester的startPanel方法來測試我的面板。在這些面板中,我經常使用PageParameters訪問數據,使用getPage()。getPageParameters()。但是,startPanel方法不會初始化DummyPage的任何頁面參數,也不會爲我提供設置頁面參數的功能。Wicket測試startPanel(Panel)和PageParameters - 如何設置它們?

如何在面板測試中設置頁面參數?

回答

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的子類,可能是最好的能夠將參數傳遞到子類的構造函數和您關心的其他配置項。

1

難道真的是這樣做嗎? startPanel已經爲我們創建了一個虛擬頁面,但沒有任何頁面參數。使用您的方法將面板附加到兩頁,這對我來說似乎不是最佳解決方案。現在我擴展了的startPanel的WicketTester(面板,PageParameters)功能:

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)); 
    } 

} 

這可難倒了我,爲什麼這個功能ISN」 t剛剛由Apache提供。

+0

+1 我的第一本能是做startPage而不是startPanel,並使用構建的測試頁來處理PageParameters。 但您的解決方案更好。 – 2010-02-09 00:59:23

+0

+1我沒有意識到它開始了它自己的頁面。這更接近我將如何寫你的測試,然後Jeroen。 – Matt 2010-02-09 15:22:26

1

我個人認爲,通過getPage().getPageParameters()得到PageParameters是一個不理想的方法。如您所見,它引入了從面板到頁面的依賴關係,這使得它們緊密耦合並且很難測試。

如果您需要訪問從PageParametersPanel內,通過創建一個構造函數接受這些,一些沿

private PageParameters params; 

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

這樣的線,你可以使用從ParametersPanel內注入其中,構建Panel與任何PageParameters你可以想象在你的測試中,你避免了耦合,證明是不利的。

相關問題