Как настроить пользовательский сеанс при модульном тестировании с помощью калитки? - PullRequest
2 голосов
/ 16 марта 2010

Я пытаюсь запустить некоторые модульные тесты на странице калитки, которая разрешает доступ только после того, как вы вошли в систему. В моем тесте JUnit я не могу запустить страницу или отобразить ее без установки сеанса.

Как установить сеанс? У меня проблемы с поиском документации о том, как это сделать.

    WicketTester tester = new WicketTester(new MyApp());
((MyCustomSession)tester.getWicketSession()).setItem(MyFactory.getItem("abc"));

//Fails to start below, no session seems to be set
    tester.startPage(General.class);
tester.assertRenderedPage(General.class);

Ответы [ 3 ]

4 голосов
/ 17 марта 2010

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

Среди вещей, которые я переопределяю, есть метод

    public abstract Session newSession(Request request, Response response);

, который позволяет вам вернуть поддельные настройки сеанса с чем угодно.

Это в Wicket 1.3 - если вы используете 1.4, возможно, что-то из этого изменилось, и, как отмечено в другом ответе, это может быть связано с ошибкой калитки.

Но если предположить, что интерфейс не сильно изменился, переопределение этого метода также может быть другим способом решения проблемы в WICKET-1215.

1 голос
/ 23 марта 2010

Используя Wicket 1.4, я использую мои обычные реализации WebApplication и WebSession, называемые NewtEditor и NewtSession в моем приложении. Я переопределяю newSession, где я делаю то же самое, что и в обычном коде приложения, за исключением того, что я вхожу сразу. Я также переопределяю newSessionStore по соображениям производительности, я скопировал этот трюк из кода WicketTesters.

tester = new WicketTester(new NewtEditor() 
{
    @Override
    public Session newSession(Request request, Response response)
    {
        NewtSession session = new NewtSession(request);
        session.signIn(getTestDao());
        return session;
    }

    @Override
    protected ISessionStore newSessionStore()
    {
        // Copied from WicketTester: Don't use a filestore, or we spawn lots of threads,
        // which makes things slow.
        return new HttpSessionStore(this);
    }
});
1 голос
/ 16 марта 2010

Возможно, вы сталкиваетесь с WICKET-1215 . В противном случае то, что вы делаете, выглядит хорошо. Например, у меня есть метод установки Junit4, который выглядит следующим образом:

@Before
public void createTester() {
    tester = new WicketTester( new MyApp() );
    // see http://issues.apache.org/jira/browse/WICKET-1215
    tester.setupRequestAndResponse();
    MyAppSession session = (MyAppSession) tester.getWicketSession();
    session.setLocale(Locale.CANADA);
    session.setUser(...);
}
...