首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mockMVC方法获取java.lang.AssertionError:状态预期:200实际:500

mockMVC方法获取java.lang.AssertionError:状态预期:200实际:500
EN

Stack Overflow用户
提问于 2018-05-13 18:54:50
回答 1查看 9.4K关注 0票数 1

我在spring编写了一个测试,mockMVC这个方法:

我的方法测试是:

代码语言:javascript
运行
复制
@Test
public void getAccount()throws Exception {
     mockMvc.perform(get("/account/1"))
            .andDo(print())
            .andExpect(status().isOk())
            .andExpect(view().name("/account/"));
}

我有一个bug:

代码语言:javascript
运行
复制
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方法测试:

我的测试方法有什么不好?我能修好这个吗?

我正在寻求帮助和快速回答。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-14 02:51:07

看来你找的地方不对。

记录器输出请求URI /users/1有一个错误。

代码语言:javascript
运行
复制
Request URI = /users/1

您的测试方法是尝试获取/account/1

代码语言:javascript
运行
复制
mockMvc.perform(get("/account/1"))

至于错误本身,MethodArgumentTypeMismatchException

表示方法参数不具有预期类型的异常。

换句话说,由@GetMapping("/users/{id}")注释的方法具有错误的@PathVariable参数类型。

在您的例子中,您使用UUID作为参数:

代码语言:javascript
运行
复制
public @ResponseBody ResponseEntity<AccountDTO> getAccount(@PathVariable UUID id) {

但是,在测试中,您不是要通过UUID,而是要在测试中传递一个数值(long/int)。

如果要生成随机UUID,可以使用UUID.randomUUID()

代码语言:javascript
运行
复制
@Test
public void getAccount()throws Exception {
     mockMvc.perform(get("/account/" + UUID.randomUUID()))
            .andDo(print())
            .andExpect(status().isOk())
            .andExpect(view().name("/account/"));
}

或者,您可以在映射方法中使用long而不是uuid:

代码语言:javascript
运行
复制
@GetMapping(value = "/{id}")
@ApiOperation(value = "Retrieve account.")
public @ResponseBody ResponseEntity<AccountDTO> getAccount(@PathVariable Long id) {
    return accountService.retreiveById(id).map(ResponseEntity::ok)
            .orElseGet(() -> ResponseEntity.notFound().build());
}

不过,在这种情况下,您可能需要更改AccountService.retrieveById(id)方法。

祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50319593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档