мне нужно проверить следующий метод контроллера:Дразнящий HttpSession с помощью Mockito
@RequestMapping(value="/addLocation")
public String addLocation(HttpServletRequest request, HttpSession session) {
String location = (String) request.getParameter("plz_ort");
String radius = (String) request.getParameter("umkreis");
((ArrayList<String>) session.getAttribute("queryTopics")).clone();
...
}
Therefor Я написал тестовый класс, используя Mockito и JUnit
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import java.util.ArrayList;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpSession;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
public class MyControllerTest {
@InjectMocks
private MyController myController;
private MockMvc mockMvc;
@InjectMocks
MockHttpSession session;
@Before
public void setup() {
// Process mock annotations
MockitoAnnotations.initMocks(this);
// Setup Spring test in standalone mode
this.mockMvc = MockMvcBuilders.standaloneSetup(MyController)
.build();
}
@Test
public void addLocation_StatusOK() throws Exception {
session.setAttribute("queryTopics", new ArrayList<String>(0));
this.mockMvc.perform(
post("/addLocation")
.param("plz_ort", "PLZ ORT")
.param("umkreis", "5"))
.andExpect(
status().isOk());
}
}
Как вы можете видеть, что я должен издеваться сессию при выполнении этого теста. Когда я отлаживаю код и останавливаюсь в строке session.setAttribute("queryTopics", new ArrayList<String>(0));
, объект сеанса [email protected]
(содержащий атрибуты хэш-карты {queryTopics=[]}
), поэтому я думаю, что все в порядке. Однако объект сеанса моей следующей точки останова в строке ((ArrayList<String>) session.getAttribute("queryTopics")).clone();
: [email protected]
.
По крайней мере, это правильный тип (MockHttpSession
), но у него есть другой идентификатор, поэтому на самом деле это совершенно новый объект и, следовательно, не содержит атрибутов сеанса из теста.
Не могли бы вы помочь мне в этом?
работает как шарм, спасибо большое! – Erando