【发布时间】:2015-02-24 09:53:54
【问题描述】:
我正在尝试使用 Mockito 和 Junit 测试以下方法:
@Transactional
@RequestMapping(method=RequestMethod.PUT,value ="/updateEmployer/{empId}")
public @ResponseBody Object updateEmployer(@PathVariable Integer empId,) throws Exception {
Employee e = EmployeeRepository.findOne(empId);
for (Department de : e.getDepartement()){
de.setDepartmentName(e.getName + "_" + de.getName());
}
EmployeeRepository..saveAndFlush(e);
return null;
}
这是测试方法:
@Test // throw java.lang.NullPointerException
public void updateEmployeeFailureTest() throws Exception {
mockMvc.perform(
MockMvcRequestBuilders
.put("/updateEmployer/{empId}",18)
.accept(MediaType.APPLICATION_JSON)).andDo(print())
.andExpect(MockMvcResultMatchers.view().name("errorPage"))
.andExpect(MockMvcResultMatchers.model().attributeExists("exception"))
.andExpect(MockMvcResultMatchers.forwardedUrl("/WEB-INF/jsp/errorPage.jsp"))
.andExpect(MockMvcResultMatchers.status().isInternalServerError());
}
打印堆栈:
MockHttpServletRequest:
HTTP Method = PUT
Request URI = /updateEmployer/18
Parameters = {}
Headers = {Content-Type=[application/json], Accept= application/json]}
Handler:
Type = com.controllers.employeeController
Method = public java.lang.Object com.controllers.employeeController.updateEmployer(java.lang.Integer) throws java.lang.Exception
Async:
Was async started = false
Async result = null
Resolved Exception:
***Type = java.lang.NullPointerException***
ModelAndView:
View name = errorPage
View = null
Attribute = exception
***value = java.lang.NullPointerException***
FlashMap:
MockHttpServletResponse:
Status = 500
Error message = null
Headers = {}
Content type = null
Body =
Forwarded URL = /WEB-INF/jsp/errorPage.jsp
Redirected URL = null
Cookies = []
这是可行的,但是当我尝试捕获此方法引发的文本或异常时
添加@Test (expected= java.lang.NullPointerException.class) 我有这个错误:
java.lang.AssertionError:预期异常:java.lang.NullPointerException
当我尝试将 nullPointerException Text 作为 ModelAndView 部分的属性(异常)的值时,我收到此错误:
java.lang.AssertionError:预期模型属性“异常”:java.lang.NullPointerException 但为:java.lang.NullPointerException
有没有办法使用 mockito (mockmvc) 预期抛出异常或值属性 (value = java.lang.NullPointerException) 或 Resolved Exception 部分中的文本?
任何帮助将不胜感激
【问题讨论】:
-
当我尝试获取 nullPointerException Text 作为属性值(异常)时:你是怎么做到的?向我们展示代码。
-
添加这样的期望:.andExpect(MockMvcResultMatchers.model().attribute("exception","java.lang.NullPointerException"));
-
Spring 不会像您的测试所期望的那样将字符串“java.lang.NullPointerException”存储在异常属性中。它存储了 NullPointerException 的 instance。
-
我试过这个:.andExpect(MockMvcResultMatchers.model().attribute("exception", java.lang.NullPointerException.class)) 我得到这个错误:java.lang.AssertionError: Model属性“异常”应为:
但为: 。还尝试传递一个新的 NPE 实例(相同的断言错误)。那么,我应该写什么期望有这个实例?我想要一个实例或文本,但我不知道如何做到这一点。
标签: exception-handling mockito junit4 expect mockmvc