asp.net core 는 TestServer 를 사용 하여 통합 테스트 를 하 는 방법 입 니 다.
이전에 제 프로젝트 의 통합 테스트 는 랜 덤 포트 였 습 니 다.매번 에 웹 서버 를 진실 하 게 작 동 했 습 니 다.예전 에 마이크로소프트 문서
TestServer
의 소 개 를 본 적 이 있 습 니 다.그 당시 에 자세히 보지 못 했 습 니 다.차이 가 많 지 않 으 면 소 용이 없다 고 생각 하고 진정한 웹 서버 를 시작 하여 통합 테스트 를 했 습 니 다.지난번 에 공유Xunit.DependencyInjection
테스트 프로젝트 를 개조 할 때쓴 썩 은 코드 를 대사 가 본 후에 대 사 는TestServer
로 통합 테스트 를 하 자고 제안 했다.사용TestServer
은 포트 번 호 를 진정 으로 점용 하지 않 고 권한 문제 가 발생 하지 않 을 것 이다.그래서 TestServer 의 소스 코드 를 벗 기 고TestServer
로 통합 테스트 항목 을 개선 했다.대사 에 게 감사 했다.Sample
이전 통합 테스트 는 포트 번 호 를 감청 하고 실제 웹 서버 를 사 용 했 습 니 다.다음은 사용
TestServer
으로 바 꾸 었 습 니 다.TestServer
지금 은Microsoft.AspNetCore.TestHost
이 Nuget 가방 에서 이 가방 을 인용 하면 사용 할 수 있 습 니 다.서비스 등록 시
UseTestServer
라 는 확장 방법 을 호출 하면 주입TestServer
할 수 있 습 니 다.통합 테스트 는 일반적으로HttpClient
으로 서버 측의 API 주소 나 페이지 를 요청 합 니 다.TestServer
편리 한CreateClient
방법 을 제공 하여 요청TestServer
을 편리 하 게 만 들 수 있 습 니 다HttpClient
.마이크로소프트 도 비교적 편리 한 확장 방법 을 제공 하여IHost
의GetTestClient
확장 방법 으로 얻 을 수 있다HttpClient
.사용
TestServer
은 간단 합 니 다.nuget 패키지Microsoft.AspNetCore.TestHost
를 참조 하여 다음 과 같이 변경 합 니 다.소스 코드 개관
TestServer 가 시 작 될 때 감청 포트 가 없 으 므 로 원본 코드
IServer
의Start
를 참고 할 수 있 습 니 다.TestServer
CreateClient
방법 으로 TestServer 인 터 페 이 스 를 호출 하 는 HttpClient 를 만 듭 니 다.위의 코드 를 통 해 알 수 있 듯 이 핵심 코드 는
ClientHandler
에서 정 의 된 것 으로 소스 코드 가 약간 많 고 상세 하 게 소스 코드https://github.com/dotnet/aspnetcore/blob/v5.0.0/src/Hosting/TestHost/src/ClientHandler.cs를 직접 볼 수 있다.ClientHandler
HttpClient Handler 의SendAsync
방법 을 재 작성 하여 요청 을 직접 차단 하여 Http 요청 이 발생 하지 않도록 합 니 다.실제 요청 과정 은 먼저 Http 요청 정 보 를 HttpRquestFeature 로 변환 한 다음 에 TestServer 에 직접 처리 합 니 다.사실은 asp.net core 의 요청 관 로 를 직접 처리 합 니 다.요청 처리 가 끝 난 후에...HttpContext 응답 을 가 져 오고 HttpResponseFeature 를 가 져 와 HttpClient 에 필요 한 HttpResponseMessage 로 변환 합 니 다.More
TestServer
HTTP 요청 처 리 를 지원 할 뿐만 아니 라 웹 소켓 의 처리 도 지원 하 며 웹 소켓 의 통합 테스트 도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 통합 테스트 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
작업 중 문제 해결 - (win 2003 asp. net) Session 과 페이지 전송 방법 으로 해결 방안 을 정상적으로 사용 할 수 없습니다.또한 F 는 처음에 우리 의 BP & IT 프로젝트 팀 이 Forms 폼 검증 을 사용 했다 고 판단 할 수 있 습 니 다. 페이지 를 뛰 어 넘 는 것 은http://hr.bingjun.cc/MyTask/MyTas...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.