asp.net core 는 TestServer 를 사용 하여 통합 테스트 를 하 는 방법 입 니 다.

Intro
이전에 제 프로젝트 의 통합 테스트 는 랜 덤 포트 였 습 니 다.매번 에 웹 서버 를 진실 하 게 작 동 했 습 니 다.예전 에 마이크로소프트 문서TestServer의 소 개 를 본 적 이 있 습 니 다.그 당시 에 자세히 보지 못 했 습 니 다.차이 가 많 지 않 으 면 소 용이 없다 고 생각 하고 진정한 웹 서버 를 시작 하여 통합 테스트 를 했 습 니 다.지난번 에 공유Xunit.DependencyInjection테스트 프로젝트 를 개조 할 때쓴 썩 은 코드 를 대사 가 본 후에 대 사 는TestServer로 통합 테스트 를 하 자고 제안 했다.사용TestServer은 포트 번 호 를 진정 으로 점용 하지 않 고 권한 문제 가 발생 하지 않 을 것 이다.그래서 TestServer 의 소스 코드 를 벗 기 고TestServer로 통합 테스트 항목 을 개선 했다.대사 에 게 감사 했다.
Sample
이전 통합 테스트 는 포트 번 호 를 감청 하고 실제 웹 서버 를 사 용 했 습 니 다.다음은 사용TestServer으로 바 꾸 었 습 니 다.TestServer지금 은Microsoft.AspNetCore.TestHost이 Nuget 가방 에서 이 가방 을 인용 하면 사용 할 수 있 습 니 다.
서비스 등록 시UseTestServer라 는 확장 방법 을 호출 하면 주입TestServer할 수 있 습 니 다.통합 테스트 는 일반적으로HttpClient으로 서버 측의 API 주소 나 페이지 를 요청 합 니 다.TestServer편리 한CreateClient방법 을 제공 하여 요청TestServer을 편리 하 게 만 들 수 있 습 니 다HttpClient.마이크로소프트 도 비교적 편리 한 확장 방법 을 제공 하여IHostGetTestClient확장 방법 으로 얻 을 수 있다HttpClient.
사용TestServer은 간단 합 니 다.nuget 패키지Microsoft.AspNetCore.TestHost를 참조 하여 다음 과 같이 변경 합 니 다.

소스 코드 개관
TestServer 가 시 작 될 때 감청 포트 가 없 으 므 로 원본 코드IServerStart를 참고 할 수 있 습 니 다.

TestServerCreateClient방법 으로 TestServer 인 터 페 이 스 를 호출 하 는 HttpClient 를 만 듭 니 다.

위의 코드 를 통 해 알 수 있 듯 이 핵심 코드 는ClientHandler에서 정 의 된 것 으로 소스 코드 가 약간 많 고 상세 하 게 소스 코드https://github.com/dotnet/aspnetcore/blob/v5.0.0/src/Hosting/TestHost/src/ClientHandler.cs를 직접 볼 수 있다.
ClientHandlerHttpClient Handler 의SendAsync방법 을 재 작성 하여 요청 을 직접 차단 하여 Http 요청 이 발생 하지 않도록 합 니 다.실제 요청 과정 은 먼저 Http 요청 정 보 를 HttpRquestFeature 로 변환 한 다음 에 TestServer 에 직접 처리 합 니 다.사실은 asp.net core 의 요청 관 로 를 직접 처리 합 니 다.요청 처리 가 끝 난 후에...HttpContext 응답 을 가 져 오고 HttpResponseFeature 를 가 져 와 HttpClient 에 필요 한 HttpResponseMessage 로 변환 합 니 다.
MoreTestServerHTTP 요청 처 리 를 지원 할 뿐만 아니 라 웹 소켓 의 처리 도 지원 하 며 웹 소켓 의 통합 테스트 도TestServer로 처리 할 수 있다.
HTTP 요청 이 없 는 지 의 심 스 럽 다 면 Fildder 와 같은 HTTP 패키지 도구 로 테스트 를 실행 하 는 동안 HTTP 요청 이 있 는 지 모니터링 할 수 있 습 니 다.실제 웹 서버 라면 HTTP 요청 이 있 을 수 있 고 TestServer 에 서 는 HTTP 요청 이 없 을 것 입 니 다.
https://docs.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-5.0
https://github.com/dotnet/aspnetcore/tree/v5.0.0/src/Hosting/TestHost/src
https://github.com/dotnet/aspnetcore/tree/v5.0.0/src/Hosting/TestHost/src/TestServer.cs
https://github.com/dotnet/aspnetcore/blob/v5.0.0/src/Hosting/TestHost/src/ClientHandler.cs#L58
https://github.com/OpenReservation/ReservationServer/blob/3.1.0/OpenReservation.API.Test/Startup.cs#L26
https://github.com/OpenReservation/ReservationServer/commit/e683065bf76e3c51688238c382b2c1f0c8028e7d
asp.net core 가 TestServer 를 사용 하여 통합 테스트 를 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 asp.net core 통합 테스트 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기