Как установить пользовательский сеанс при модульном тестировании с помощью калитки?

Я пытаюсь запустить некоторые модульные тесты на странице калитки, которая разрешает доступ только после того, как вы вошли в систему. В моем тесте 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 ответа

Решение

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

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

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

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

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

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

Используя 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);
    }
});

Вы можете столкнуться с 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(...);
}
Другие вопросы по тегам