Mockitoを使用してSpringコントローラーをテストしようとしていますが、すべてを@Mockにしないと、実際にどのようにテストできるかを知ることができません。さらに、テストメソッドはNullPointerExceptionを返します。これは、ユーザーを認識できず、実際にはユーザーロールをまったく認識できないためです。どういうわけか私のコントローラーをテストする方法はありますか?
(コントローラークラス)
@Controller
@SessionAttributes("user")
@RequestMapping("/login.htm")
public class LoginController{
@Autowired
private UserDao userDao;
@Autowired
private LoginValidator loginValidator;
public LoginValidator getLoginValidator() {
return loginValidator;
}
public void setLoginValidator(LoginValidator loginValidator) {
this.loginValidator = loginValidator;
}
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@RequestMapping(method = RequestMethod.GET)
public String getSendEmptyForm(ModelMap model, HttpServletRequest req) {
req.getSession().invalidate();
model.addAttribute("loginForm", new LoginForm());
return "login";
}
@RequestMapping(method = RequestMethod.POST)
public String postSubmittedForm(ModelMap model, @ModelAttribute("loginForm") LoginForm loginForm,
BindingResult result, SessionStatus status) {
//validate form
loginValidator.validate(loginForm, result);
if (result.hasErrors()) {
return "login";
}
User user = userDao.findByLogin(loginForm.getLogin());
model.addAttribute("user", user);
if (user.getRole().getName().equals("Admin")) {
model.addAttribute("usersList", userDao.findAll());
return "viewAllUsersPage";
}
if (user.getRole().getName().equals("User")){
return "userPage";
}
model.addAttribute("error", "Your role is not User or Admin");
return "errorPage";
}
}
そして私のテストクラス
@RunWith(MockitoJUnitRunner.class)
public class LoginControllerTest {
@InjectMocks
private LoginController controllerUT = new LoginController();
@Mock
private ModelMap model;
@Mock
private LoginForm loginForm;
@Mock
private BindingResult result;
@Mock
private SessionStatus status;
@Mock
private LoginValidator validator;
@Mock
private UserDao userDao;
@Mock
private User useк;
@Test
public void testSendRedirect(){
final String target = "login";
String nextPage = controllerUT.postSubmittedForm(model, loginForm, result, status);
assertEquals(target, nextPage);
}
}