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