Тестирование калитки startPanel(Panel) и PageParameters - как их настроить?
В настоящее время я использую метод startPanel WicketTester для тестирования своих панелей. В этих панелях я часто использую PageParameters для доступа к данным, используя getPage(). GetPageParameters(). Однако метод startPanel не инициализирует какие-либо параметры страницы для DummyPage и не предлагает мне функциональные возможности для установки параметров страницы.
Как настроить параметры моей страницы во время тестов панели?
3 ответа
Это действительно способ сделать это? StartPanel уже создает фиктивную страницу для нас, но без каких-либо параметров страницы. Использование вашего подхода прикрепляет панель к двум страницам, что не кажется мне оптимальным решением. Прямо сейчас я расширил WicketTester функцией startPanel(Panel, 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));
}
}
Меня удивляет, почему эта функциональность предоставляется Apache не только из коробки.
Лично я думаю, что получаю 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
Вы можете вообразить в своих тестах, и вы избежали связи, которая оказалась невыгодной.
Вы можете использовать анонимный (или подкласс) 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 может быть лучше всего иметь возможность передавать параметры в конструктор вашего подкласса и другие настраиваемые элементы, которые вас интересуют.