Я предполагаю, что вы говорите о HttpSession.
Создайте фиктивный сеанс, скажите фиктивному сеансу, чтобы он всегда возвращал этот объект при вызове его метода getAttribute с именем, используемым тестируемым объектом, и передавайте этот фиктивный сеанс, а не реальный, объекту тестирования. 1003 *
В этом помогут такие API-интерфейсы, как Mockito или EasyMock.
РЕДАКТИРОВАТЬ: Предположим, что метод, который вы хотите проверить, выглядит следующим образом:
public String foo() {
// some lines of code
MyObject o =
(MyObject)((HttpServletRequest) FacesContext
.getCurrentInstance().getExternalContext().getRequest())
.getSession().getAttribute("myObject");
// some more lines of code, using o.
}
Вы можете изменить его следующим образом:
public String foo() {
// some lines of code
MyObject o = getMyObjectFromSession();
// some more lines of code, using o.
}
protected MyObject getMyObjectFromSession() {
return (MyObject)((HttpServletRequest) FacesContext
.getCurrentInstance().getExternalContext().getRequest())
.getSession().getAttribute("myObject");
}
И затем вы могли бы использовать фальшивый фреймворк, чтобы сделать что-то вроде этого (псевдокод):
// mockFoobar is the object to test. We just mock its getMyObjectFromSession method
FooBar mockFoobar = mock(Foobar.class);
MyObject objectInSession = new MyObject();
when(mockFoobar.getMyObjectFromSession()).thenReturn(objectInSession);
String s = mockFoobar.foo();
assertEquals("expected result", s);