Метод mockMVC GET java.lang.AssertionError: Ожидаемый статус: 200 Фактический: 500 - PullRequest
0 голосов
/ 13 мая 2018

я написал тест весной mockMVC этот метод:

мой метод тестирования:

@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

Thisмой метод POST:

что плохого в моем методе тестирования?что я могу это исправить?

Прошу помощи и быстрого ответа

1 Ответ

0 голосов
/ 14 мая 2018

Похоже, вы не ищете нужное место для проблемы.

Регистратор выдает сообщение об ошибке с URI запроса /users/1:

Request URI = /users/1

иваш метод тестирования пытается получить /account/1:

mockMvc.perform(get("/account/1"))

Что касается самой ошибки, MethodArgumentTypeMismatchException :

Исключение, указывающее, что аргумент методане имеет ожидаемого типа.

Другими словами, метод, аннотированный @GetMapping("/users/{id}"), имеет неправильный тип параметра @PathVariable.

В вашем случае выиспользуя UUID в качестве параметра:

public @ResponseBody ResponseEntity<AccountDTO> getAccount(@PathVariable UUID id) {

Однако в своем тесте вы не передаете UUID, вы передаете числовое значение (long / int) в своем тесте.

Если вы хотите сгенерировать случайный UUID, вы можете использовать UUID.randomUUID():

@Test
public void getAccount()throws Exception {
     mockMvc.perform(get("/account/" + UUID.randomUUID()))
            .andDo(print())
            .andExpect(status().isOk())
            .andExpect(view().name("/account/"));
}

В качестве альтернативы, вы можете использовать long вместо uuid в своем методе отображения:

@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).

Удачи!

...