Как издеваться над ResponseEntityс универсальным типом? - PullRequest
0 голосов
/ 14 октября 2018

Мне нужно издеваться над сервисом.я получаю нулевое значение в ResponseEntity<?> соответственно, издеваясь над классом.

Метод, который необходимо смоделировать:

public List<Expression> getExpression(String expressView, Localdate date) {

    List<Expression> =new ArrayList<>();
    Map<String, Object> uri = new HashMap<>();
    UriComponenetsBuilder build = 
        UriComponentsBuilder.fromHttpUrl("someUrl" + "/" + expressView);
    build.queryParam(someParameter, someParameter);
    build.queryParam(someParameter, someParameter);
    build.queryParam(someParameter, someParameter);

    HttpHeaders header = new HttpHeaders();
    header.setContentType(MediaType.APPLICATION_JSON);
    RestClient client = new RestClient(
        build.build().encode.toUriString, HttpMethod.GET.Uri, header
    );

    ResponseEntity<?> resp = restC.SomeMethod(client);

    if (resp = !null) {
        //it goes to these line
    }

  }

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

when(restC.SomeMethod(client)).thenReturn(resp);

Таким образом, при вызове метода выше службы получают некоторые данные, получают значение expressView исохранить как список.когда я издевался над методом when(restC.SomeMethod(client)).thenReturn(resp);, он попадал на URL, но значение, которое я получаю в ответ resp, равно нулю.Итак, я получаю значение resp как null.Я проверил URL (someUrl) в почтальоне, он возвращает значение.

Как высмеивать ResponseEntity<?>?

Спасибо.

1 Ответ

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

Сначала создайте ResponseEntity объект:

HttpHeaders header = new HttpHeaders();
header.setContentType(MediaType.APPLICATION_JSON);

ResponseEntity<?> responseEntity = new ResponseEntity<>(
    "some response body",
    header, 
    HttpStatus.OK // Or HttpStatus.ACCEPTED
);

Затем создайте макет:

when(restC.SomeMethod(client)).thenReturn(responseEntity);

Точка, на которую следует обратить внимание:

Избегайте использования ResponseEntity внутри @Service class.Вы должны использовать ResponseEntity в @RestController class.

И вы можете Inject ваш @Service class, используя @Autowired аннотацию, например:

@RestController
public class YourClass {

    @Autowired
    private YourClassService yourClassService;

Итак:

@Service classбудет обрабатывать business or data objects и @RestController class обрабатывать Response и Request объекты.Таким образом, у нас есть Single Responsibility принцип.


Несколько приятных ссылок:

Надеюсь, это поможет!

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