В моих модульных тестах мне нужно смоделировать экземпляр модели данных в пружине @Controller, иначе возвращаемое значение метода @RequestMapping будет неверным.
Чтобы сделать это, я попытался сделать следующее:
- Создание пользовательского макета, который вызывает user.login () и должен возвращать «true»
- Вставить фиктивный объект в LoginController
- Остановить метод входа вверните true
- Выполните POST / Login с MockMVC из весеннего теста
- убедитесь, что mockUser.login был вызван
Вот метод контроллера:
@RequestMapping(value = "/Login", method = RequestMethod.POST)
public String updateUI(Locale locale, Model model, @RequestParam("username") String username,
@RequestParam("hashedPW") String hashedPW, HttpServletRequest request) {
model.addAttribute("username", username);
user = new User(username, username, hashedPW.getBytes(), LoginHandler.getInstance());
boolean loginResult = user.login();
if(loginResult == true) {
return "profile";
}
String output = "Failed login (" + username + ") requested, locale = " + locale;
log(output);
return "home";
}
и моя инициализация фиктивных объектов с инжекцией:
@Mock
private User mockUser;
@InjectMocks
private LoginController injectedLoginController;
@Before
public void setup() throws ServletException {
MockitoAnnotations.initMocks(this);
mvc = MockMvcBuilders.standaloneSetup(injectedLoginController).build();
LOGFILE = new File("logs/general.log");
}
и, наконец, модульный тест:
@Test
public void testLoginSuccess() throws Exception {
String username = "Stefan";
byte[] hashedPW = "".getBytes();
when(mockUser.login()).thenReturn(true);
ResultActions ra = mvc
.perform(post("/Login").param("username", username).param("hashedPW", hashedPW.toString()))
.andExpect(status().isOk());
verify(mockUser).login();
}
Все вместе я ожидал объект User, который обрабатывается контроллеромиметь тип mockUser вместо User и метод login (), который вызывается один раз (соответственно) и возвращает «true».
Но все, что я получаю, это «Требуется, но не вызывается: mockUser.login ()На самом деле, было нулевое взаимодействие с этимк. "
Я благодарен за любые предложения по решению моей проблемы, так как я работаю над этим уже довольно давно, и, похоже, я не понимаю хитрости.