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

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

person vagabond    schedule 16.03.2010    source источник


Ответы (3)


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

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

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

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

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

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

person Don Roby    schedule 17.03.2010
comment
Я использовал это средство и раньше, чтобы предоставить пользовательский сеанс во время тестирования. - person Matt; 17.03.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(...);
}
person Brian Laframboise    schedule 16.03.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);
    }
});
person Thomas Kappler    schedule 23.03.2010