Тестирование калитки startPanel (Panel) и PageParameters - как их настроить? - PullRequest
1 голос
/ 08 февраля 2010

В настоящее время я использую метод startPanel WicketTester для тестирования моих панелей. В этих панелях я часто использую PageParameters для доступа к данным, используя getPage (). GetPageParameters (). Однако метод startPanel не инициализирует какие-либо параметры страницы для DummyPage и не предлагает мне функциональные возможности для установки параметров страницы.

Как настроить параметры моей страницы во время тестов панели?

Ответы [ 3 ]

1 голос
/ 09 февраля 2010

Это действительно способ сделать это? 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);
}

И создал новую фиктивную панель с константой параметров страницы

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 голос
/ 29 марта 2011

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

0 голосов
/ 08 февраля 2010

Вы можете использовать анонимный (или подкласс) 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 может оказаться лучшим для прохожденияпараметры в конструктор вашего подкласса и другие настраиваемые элементы вашего интереса.

...