Delphi의 WebMock HTTP 응답 정보

이전 글에서 우리는 DUnitX 테스트의 기본 구조를 연구했고 WebMocks 메모리 HTTP 단점을 사용했다.이 점에서 그것은 매우 간단해 보이며 많은 현실 세계의 HTTP와 상호작용이 완전히 다르다.대부분의 요청은 컨텐트 없이 "OK"에만 응답하지 않습니다.우리가 어떤 내용을 모의할 수 있는지, 그리고 이런 내용을 어떻게 모의할 수 있는지, 당신의 테스트 대상에게 장면을 제공하여 테스트를 작성하여 그들의 행동을 단언할 수 있도록 하겠습니다.

기본값
응답을 지정하지 않고 루트 요청을 저장할 때 기본값은 비어 있지만 성공합니다.
HTTP/1.1 200 OK
content-type: text/plain; charset=utf-8
content-length: 0
이 응답은 상태 코드501 Not Implemented에만 루트 요청을 저장하지 않는 것과 다르다.그렇다면, 우리는 어떻게 응답을 맞춤형으로 정합니까?사용ToRespond이 답이다.링크ToRespond전화를 통해 무엇을 할 수 있는지 봅시다.

상태 코드 설정ToRespond 함수는 선택할 수 있는 매개 변수AResponseStatus를 받아들여 응답 상태 코드를 지정할 수 있습니다.반환 상태204 No Content는 다음과 같습니다.
WebMock.StubRequest('GET', '/').ToRespond(204);
모든 사람들이 HTTP 상태 코드에 대해 전면적으로 알고 있는 것은 아니기 때문에 감사합니다ToRespond는 일괄 값을 받아들여 테스트 코드에 설명 기호를 사용할 수 있고 주석을 추가할 필요가 없습니다.WebMock.ResponseStatus 약관에 추가uses하면 상태204NoContent라고 할 수 있습니다.
WebMock.StubRequest('GET', '/').ToRespond(NoContent);
나는 여기서 잠시 멈추고 웹맥이 제공한 몇 가지 작은 문법적 장점을 지적할 것이다. WithStatus테스트는 WithStatus 이후 링크ToRespond를 통해 보다 자세히 설명됩니다.
WebMock.StubRequest('GET', '/')
  .ToRespond
  .WithStatus(204);

// or

WebMock.StubRequest('GET', '/')
  .ToRespond
  .WithStatus(NoContent);
WithStatus를 사용하여 사용자 정의 상태 코드와 텍스트를 반환할 수도 있습니다.
WebMock.StubRequest('GET', '/')
  .ToRespond
  .WithStatus(321, 'Back In The Room');
이제 우리는 응답 상태를 어떻게 바꾸는지 알게 되었다.단, 204 No Content 을 되돌려 주지 않으면, 일부 데이터를 되돌려 주기를 원할 수도 있습니다.다음은 본문 내용을 설정하는 것을 살펴봅시다.

본문 내용 설정
앞에서 말한 바와 같이 기본 응답 내용은 UTF-8 문자 세트가 있는 0의 일반 텍스트 응답입니다.WithBody를 사용하여 본문 내용을 설정합니다.
WebMock.StubRequest('GET', '/')
  .ToRespond
  .WithBody('Hello');
이것은 순수한 텍스트에 좋지만, JSON과 같은 다른 내용을 되돌려 주고 싶을 수도 있습니다.간단합니다. 컨텐트 유형을 사용하여 두 번째 매개변수를 지정합니다.
WebMock.StubRequest('GET', '/')
  .ToRespond
  .WithBody('{ "key": "value" }', 'application/json');
이제 우리는 작은 부분의 데이터로 응답하는 방법을 알게 되었다. 만약 우리가 더 큰 데이터가 필요하거나 텍스트에 표시하기가 쉽지 않다면 어떻게 해야 합니까?이것이 바로 WithBodyFile의 용무지다.파일에 대한 경로를 제공합니다. WebMock은 정확한 내용 형식으로 파일을 되돌려 보려고 시도합니다.
WebMock.StubRequest('GET', '/video')
  .ToRespond
  .WithBodyFile('video.mp4');
마찬가지로 WithBody와 마찬가지로 파일 형식이 흔하지 않거나 명확하지 않으면 WithBodyFile 내용 형식의 두 번째 인자를 받아들인다.
WebMock.StubRequest('GET', '/video')
  .ToRespond
  .WithBodyFile('video.3gp', 'video/3gpp');

제목 추가
API를 테스트할 때 특정 제목을 사용하여 응답해야 할 때가 있습니다.예를 들어, ReST API 설계에서는 리소스 및 응답location을 생성할 때 대개 201 Created 헤드가 반환됩니다.
WebMock.StubRequest('POST', '/resources')
  .ToRespond
  .WithStatus(Created)
  .WithHeader('location', 'http://example.com/resources/1');
제목 목록을 만들기 위해 여러 개의 호출을 WithHeader 에 연결할 수 있습니다.
WebMock.StubRequest('GET', '/resources/1')
  .ToRespond
  .WithHeader('cache-control', 'no-cache')
  .WithHeader('last-modified', 'Sat, 13 Feb 2021 12:45:26 GMT');
편의를 위해 Delphi에서 처리TStringList된 HTTP 헤드가 흔하다는 점을 감안하여 웹Mocks는 WithHeaders 수용TStrings 실례를 제공하였다.이렇게 하면 기존 머리글 값 목록의 머리글을 사용하여 응답을 채울 수 있습니다.
var
  Headers: TStringList;
begin
  Headers := TStringList.Create;
  Headers.Values['cache-control'] := 'no-cache';
  Headers.Values['last-modified'] := 'Sat, 13 Feb 2021 12:45:26 GMT';

  WebMock.StubRequest('GET', '/resources/1')
    .ToRespond
    .WithHeaders(Headers);
end;
앞의 두 예는 행위상 같다.호출 WithHeaders 은 간단한 쓰기 방식이지만, 제목 집합을 구축했다면, 테스트를 작성할 때 호출을 WithHeader 에 연결하는 것이 더 설명적일 것이라고 믿습니다.결국, 이것은 일종의 선호이다. 너는 자신에게 적합한 것을 선택할 수 있다.

지금까지 저희가 뭘 배웠는지.
앞의 글에서 웹맥으로 DunitX 프로젝트를 구축하는 것이 얼마나 쉬운지 보았다.본고에서 우리는 WebMock의 HTTP를 위한 인터페이스 방법을 사용하여 HTTP 응답을 맞춤형으로 만드는 방법을 배웠다.프로젝트에서 시도해 보고, 평론이나via에서 어떻게 진행되고 있는지 알려주세요.찾을 수 있습니다demo code on GitHub.이 시리즈의 다음 부분에서는 곧 "Delphi에서 HTTP 요청과 WebMock을 일치시킨다"고 소개할 것이다.

좋은 웹페이지 즐겨찾기