Я думаю, вам нужно сообщить контексту JMock, сколько раз вы ожидаете, что метод будет вызван, прежде чем вы начнете его вызывать.
final HttpServletRequest request = context.mock(HttpServletRequest.class);
context.checking(new Expectations(){{
one(request).getSession(true); will(returnValue(session));
}});
final HttpSession session = request.getSession();
Я не очень знаком с JMock, но действительно ли вас волнует в вашем dwnLoadCel
модульном тесте, сколько раз вызываются определенные методы в объекте? Или вы просто пытаетесь протестировать свой класс, который зависит от HttpSession без реальной сессии? Если это последнее, то я думаю, что JMock для вас излишне.
Возможно, вы захотите либо создать класс, который реализует интерфейс HttpSession
самостоятельно, только для целей модульного тестирования (заглушка), и запустить свои тесты без него, либо вы должны взглянуть на * 1008. * и определите, действительно ли должна иметь ссылку на HttpSession или просто нужны некоторые свойства в HttpSession. Рефакторинг dwnLoadCel
зависит только от того, что ему действительно нужно (Map
или определенное значение параметра в объекте Session) - это упростит ваш модульный тест (зависимость от контейнера сервлетов прощается).
Я думаю, что у вас уже есть какой-то уровень внедрения зависимостей в вашем классе, который уже тестируется, но вы можете зависеть от слишком широкого объекта. В блоге Google Test было много превосходных статей по DI в последнее время, которые могут оказаться полезными (я уверен, что есть).