тестирование пружинного башмака с использованием testng - PullRequest
0 голосов
/ 20 октября 2018

Как написать тестовый пример метода POST, если записанный тип определенного метода создания в слое обслуживания равен ResponseEntity<Object>?

Это мой метод createOffer:

public ResponseEntity<Object> createOffer(Offer offer) {
    Offer uoffer = offerRepository.save(offer);


    URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{jobTitle}").
                    buildAndExpand(uoffer.getJobTitle()).toUri();

    return ResponseEntity.created(location).build();

}

и это соответствующий ему метод класса тестирования:

@Test
public void testCreateOffer() {
    Offer offer = new Offer("SE",new Date(),5);
    Mockito.when( offerRepository.save(offer)).thenReturn( offer);
    assertThat(offerServiceImpl.createOffer(offer)).isEqualTo(offer);
}

Здесь я получаю сообщение об ошибке при выполнении этого теста, который не является текущим атрибутом запроса сервлета, и исключение:

java.lang.IllegalStateException

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Это ответ на поставленный выше вопрос.

Надеюсь, это поможет, когда кто-то найдет ту же проблему !!!

@Test
public void testCreateOffer() {
    Offer offer = new Offer("SE",new Date(),5);


    MockHttpServletRequest request = new MockHttpServletRequest();
    RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request));


    URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{jobTitle}").
            buildAndExpand(offer.getJobTitle()).toUri();

    ResponseEntity<Object> response = ResponseEntity.created(location).build();
    Mockito.when( offerRepository.save(offer)).thenReturn(offer);
    assertThat( offerServiceImpl.createOffer(offer)).isEqualTo(response);
}
0 голосов
/ 20 октября 2018

Проблема в том, что в вашем методе вы хотите получить информацию из класса ServletUriComponentsBuilder.Когда вы открываете этот класс в комментарии, это

UriComponentsBuilder с дополнительными статическими фабричными методами для создания ссылок на основе текущего запроса HttpServletRequest.

То есть это означает, что когда ваше приложение работаетСервер (например, tomcat) у вас есть контекст, и вы можете прочитать информацию из HttpServletRequest.Но в юните у вас нет контекста, и вы не можете получить эту информацию.Поэтому, когда ваш код запускается и достигает ServletUriComponentsBuilder.fromCurrentRequest (), тогда код готов.Таким образом, вы должны издеваться над этим.Посмотрите на эту ссылку, она может вам помочь.

ServletUriComponentsBuilderTests

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...