주입 된 종속성이있는 컨트롤러 클래스 중 하나에 대한 통합 테스트를 작성하려고합니다. 내가 주입 된 개체를 통해 메서드를 호출하는 내 컨트롤러의 일부를 테스트하려고하지만 null 포인터 예외로 인해 내 테스트가 실패 할 때 실행합니다. 테스트에서 @ContextConfiguration과 @RunsWith 주석을 사용했지만 도움이되지 않았습니다. 일부 코드가 도움이 될 수 :스프링 통합 테스트 의존성 주입 컨트롤러
AuthenticationController :
시험의 context.xml에서@Controller
public class AuthenticationController {
@Resource(name = "userManagement")
private UserManagement um;
@RequestMapping(method = RequestMethod.POST)
public String onSubmit(@ModelAttribute("user") UserForm user,
BindingResult result, Model model, HttpSession session) {
LoginFormValidator validator = new LoginFormValidator();
validator.validate(user, result);
if (result.hasErrors()) {
return "login";
} else {
User u = um.login(user.getEmail(), user.getPwd());
if (u != null) {
session.setAttribute("user", u);
LOGGER.info("succesful login with email: " + u.getEmail());
model.addAttribute("result", "succesful login");
} else {
model.addAttribute("result", "login failed");
}
return "result";
}
}
: beans:bean id="userManagement" class="my.packages.UserManagement"
AuthenticationControllerTest :
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"test-context.xml" })
public class AuthenticationControllerTest {
private MockHttpServletRequest request;
private MockHttpServletResponse response;
private AuthenticationController controller;
@Before
public void setUp() {
request = new MockHttpServletRequest();
response = new MockHttpServletResponse();
controller = new AuthenticationController();
}
@Test
public void testLoginPost() throws Exception {
request.setMethod("POST");
request.setRequestURI("/login");
request.setParameter("email", "[email protected]");
request.setParameter("pwd", "test");
final ModelAndView mav = new AnnotationMethodHandlerAdapter()
.handle(request, response, controller);
final UserForm u =
assertAndReturnModelAttributeOfType(mav, "user", UserForm.class);
assertEquals("[email protected]", u.getEmail());
assertEquals("test", u.getPwd());
assertViewName(mav, "result");
/* if UserForm is not valid */
final BindingResult errors = assertAndReturnModelAttributeOfType(mav,
"org.springframework.validation.BindingResult.user",
BindingResult.class);
assertTrue(errors.hasErrors());
assertViewName(mav, "login");
}
스택 트레이스가 오류가 발생 하더군요 여기서 테스트는 삽입 된 userMangaement 객체의 login 메소드를 호출합니다. um = null이므로 주입이 테스트와 함께 작동하지 않습니다. 컨트롤러가 잘 작동합니다.
모든 의견이 도움이 될 것입니다. 사전에
감사합니다,
뒤쥐