2010-03-16 2 views
2

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

ответ

4

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

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

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

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

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

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

+0

Я использовал это средство перед тем, чтобы предоставить пользовательскую сессию во время тестирования. – Matt

1

Возможно, вы столкнулись с 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(...); 
} 
1

Используя 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); 
    } 
}); 
Смежные вопросы