Тестирование калитки 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 может быть лучше всего иметь возможность передавать параметры в конструктор вашего подкласса и другие настраиваемые элементы, которые вас интересуют.

Другие вопросы по тегам