我在spring mockVCC中写了一个测试这个方法:
我的方法测试是:
@Test
public void getAccount()throws Exception {
mockMvc.perform(get("/account/1"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(view().name("/account/"));
}
我有一个以下的错误:
MockHttpServletRequest:
HTTP Method = GET
Request URI = /users/1
Parameters = {}
Headers = {}
Body = <no character encoding set>
Session Attrs = {}
Async:
Async started = false
Async result = null
Resolved Exception:
Type = org.springframework.web.method.annotation.MethodArgumentTypeMismatchException
ModelAndView:
View name = null
View = null
Model = null
FlashMap:
Attributes = null
MockHttpServletResponse:
Status = 500
Error message = null
Headers = {Content-Type=[text/plain;charset=ISO-8859-1], Content-Length=[14]}
Content type = text/plain;charset=ISO-8859-1
Body = We are doomed.
Forwarded URL = null
Redirected URL = null
Cookies = []
java.lang.AssertionError: Status
Expected :200
Actual :500
这是我的POST方法测试:
我的测试方法有什么不好?我可以解决这个问题?
我正在寻求帮助并快速回答
1 回答
看来你没有找到适合这个问题的地方 .
Logger 输出您在请求URI
/users/1
时出错:并且您的测试方法正试图获得
/account/1
:至于错误本身,MethodArgumentTypeMismatchException:
换句话说,
@GetMapping("/users/{id}")
注释的方法具有错误的@PathVariable
参数类型 .在您的情况下,您使用UUID作为参数:
但是,在测试中,您没有传递UUID,而是在测试中传递了一个数值(long / int) .
如果要生成随机UUID,可以使用
UUID.randomUUID()
:或者,您可以在映射方法中使用long而不是uuid:
虽然在这种情况下,您可能需要更改
AccountService.retrieveById(id)
方法 .祝好运!