Как я могу смоделировать объект, предоставленный контейнером (например, HttpSession), при модульном тестировании приложения GWT?

В настоящее время я пытаюсь выполнить модульное тестирование своего уровня службы (все классы * Impl.java) в приложении GWT. Ну, проблема в том, что в коде у меня есть зависимость, которая нацелена на объект, предоставленный Httpsession. На самом деле я храню объект пользователя (пользователь, вошедший в систему) в httpSession.

Чтобы вернуть его из HttpSession (в классе *Impl.java), я использую это:

Пользователь user = ServiceUtil.getUser(getThreadLocalRequest().getSession());

Как я могу издеваться над этим объектом из кода моего модульного теста?

большое спасибо,


person kaffein    schedule 17.05.2011    source источник


Ответы (2)


В тестовом примере JUnit вы можете написать

    HttpSession session = new MockHttpSession();

Где MockHttpSession — это это

Вы можете поместить свой пользовательский объект в этот сеанс, а затем выполнить свой тестовый пример.

person Harshal Waghmare    schedule 08.10.2012

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

Таким образом, вы можете издеваться над своим пользовательским объектом в модульном тесте, передавать его на уровень обслуживания и не нуждаться в какой-либо фиктивной среде.

person Makkes    schedule 17.05.2011
comment
спасибо большое за ответ, попробую поменять арку по вашим рекомендациям... - person kaffein; 19.05.2011