Тестирование панелей Wicket с аргументами конструктора - PullRequest
1 голос
/ 14 октября 2011

Я получил страницу с несколькими панелями, которая принимает несколько параметров в своих конструкторах.Одним из них является меню, которое принимает список для различных кнопок в меню.

Я пытался проверить его как компоненты , но получил исключение нулевого указателя. Использование фиктивной страницы и создание панели на фиктивной странице работает.Я не совсем доволен этим подходом, так как он вводит много нового кода в мои тесты и больше возможностей для ошибок.

Есть ли лучший способ тестирования панелей, которые принимают аргументы в своем конструкторе?


Конечно: код, который дает ошибку нулевого указателя:

public void testVisitPanel(){
    VisitPanel v = new VisitPanel("visitPanel");
    tester.startComponent(v);
    tester.assertContains("DATE");
}

Панель

public VisitPanel(String id) {
    super(id);
    add( new Label("visitDate", "DATE"));
    add( new Label("visitStage", "VISIT SIGNED"));
}

И HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:wicket="http://wicket.sourceforge.net/" 
    xml:lang="en" 
    lang="en">  
<wicket:head>
</wicket:head>

<body>
    <wicket:panel>
        <span wicket:id="visitDate">VISIT DATE</span>
        <span wicket:id="visitStage">STAGE</span>
    </wicket:panel>
</body>
</html>

1 Ответ

3 голосов
/ 15 октября 2011

Если вы используете Wicket 1.4, вы, вероятно, хотите wicketTester.startPanel.

Что я делаю, это создаю реализацию ITestPanelSource в тесте, делая что-то вроде:

private class TestPanelSource implements ITestPanelSource {

    private static final long serialVersionUID = 1L;

    public Panel getTestPanel(String panelId) {
        return new MyPanel(panelId, myArg1, myArg2);
    }

}

с полями myArgN в классе теста (часто имитирует), которые подходят конструктору, а затем вызвать его в тесте или в методе setUp с

wicketTester.startPanel(new TestPanelSource());

Это в основном выполняет часть работы DummyPage за вас, так что это может быть не так далеко от того, что вы делаете сейчас, но может по крайней мере сэкономить на реализации фиктивных страниц для тестовой инфраструктуры.

В Wicket 1.5 это не рекомендуется в пользу тестирования компонентов, на которое вы ссылались в вопросе. Это также должно сработать, поэтому, возможно, стоит опубликовать некоторый реальный код, который доставляет вам проблемы с этой техникой.

...