spring метод тестирования mockMVC GET

я создал метод post в mockMVC (в весеннем загрузочном проекте). Это мой метод тестирования

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

@Test
public void createAccount() throws Exception {
     AccountDTO accountDTO = new AccountDTO("SAVINGS", "SAVINGS");
     when(addaccountService.findByName("SAVING")).thenReturn(Optional.empty());
     when(addaccountService.createAccount(any())).thenReturn(createdAccountDTO);
    CreatedAccountDTO createdAccountDTO = new CreatedAccountDTO("[email protected]", "SAVINGS", "1234rds", uuid);

    mockMvc.perform(
             post("/account").contentType(MediaType.APPLICATION_JSON)
              .content(asJsonString(AccountNewDTO)))
            .andExpect(status().isCreated())
            .andExpect(header().string("location", containsString("/account/"+uuid.toString())));
    System.out.println("aaa");
}

Я хочу написать метод GET.

как написать метод get в макете mvc? как проверить, вернулось ли то, что я кинул?


person martine    schedule 12.05.2018    source источник


Ответы (2)


Вы можете использовать статический метод get класса MockMvcRequestBuilders, см.: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.html#get-java.lang.String-java.lang.Object...-

Пример:

mockMvc.perform(get("/account")).andExpect(...);

Если вы создаете исключение в методе вашего контроллера, оно обычно инициирует выполнение обработчика исключений, который преобразует исключение в ответ об ошибке HTTP. По умолчанию вы можете проверить, был ли статус ответа 500. Если вы реализовали свой собственный обработчик исключений, вы также можете проверить тело ответа, чтобы убедиться, что оно содержит ожидаемые данные об ошибке.

person Georg Wittberger    schedule 12.05.2018
comment
спасибо, поэтому мой метод проверки получения: @Test public void getAccount() throws Exception { AccountDTO accountDTO = new AccountDTO(); AccountDTO.setEmail([email protected]); AccountDTO.setName(SAVINGS); когда(добавитьaccountService.findByName(СОХРАНЕНИЕ)).thenReturn(Необязательно.пусто()); когда(addaccountService.createAccount(любой())).thenReturn(createdAccountDTO); - person martine; 12.05.2018
comment
CreatedAccountDTO createdAccountDTO = new CreatedAccountDTO([email protected], SAVINGS, 1234rds, uuid); mockMvc.perform(get(/account).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); .content(asJsonString(accountDTO))).andExpect(status().isOk()) .andExpect(header().string(location, containsString(/users/+uuid.toString())));; } - person martine; 12.05.2018
comment
java.lang.AssertionError: Ожидаемый статус: 200 Фактический: 500 ‹Нажмите, чтобы увидеть разницу› на org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:55) на org.springframework.test.util.AssertionErrors.assertEquals (AssertionErrors.java:82) в org.springframework.test.web.servlet.result.StatusResultMatchers.lambda$matcher$9(StatusResultMatchers.java:617) в org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc .java:179) - person martine; 12.05.2018
comment
а у меня действительно ошибка. что не так с моим тестом? как его улучшить? - person martine; 12.05.2018
comment
@Test public void getUser()throws Exception { mockMvc.perform(get(/users)).andExpect(status().isOk()).andExpect(view().name(home)); - person martine; 12.05.2018
comment
Похоже, что контроллер, обрабатывающий запрос GET к /account, выдал исключение. Вот почему вы получаете статус 500 вместо ожидаемого 200. Можете ли вы предоставить код вашего класса контроллера, который реализует метод GET для /account (отредактируйте исходный вопрос)? - person Georg Wittberger; 13.05.2018

person    schedule
comment
@martine, вы можете попробовать приведенный выше фрагмент кода, чтобы заставить mockmvc получать и отправлять операции. - person Naga; 31.08.2018