gin의 Context.Redirect에 대한 단위 테스트는 GET 응답 코드에서는 작동하지만 POST 응답 코드(golang)에서는 작동하지 않습니다.

WBOY
풀어 주다: 2024-02-10 19:27:08
앞으로
1124명이 탐색했습니다.

gin 的 Context.Redirect 的单元测试适用于 GET 响应代码,但不适用于 POST 响应代码 (golang)

Go 언어로 웹 애플리케이션을 작성할 때 우리는 종종 gin 프레임워크를 사용하여 HTTP 요청과 응답을 처리합니다. 단위 테스트를 수행할 때 코드의 품질과 안정성을 보장하기 위해 코드에 대한 커버리지 테스트를 수행해야 합니다. 그러나 gin의 Context.Redirect 메서드에 대한 단위 테스트는 GET 요청을 처리할 때 잘 작동하지만 POST 요청을 처리할 때는 잘 작동하지 않습니다. 이 기사에서 Apple PHP 편집기는 이 문제가 발생하는 이유를 자세히 설명하고 POST 요청 단위 테스트에 대한 몇 가지 솔루션을 제공합니다.

질문 내용

내 서버가 특정 엔드포인트를 다른 서버로 리디렉션하도록 하고 싶습니다. 이 엔드포인트는 리디렉션을 올바르게 따르기 위해 getted 或 posted。在这两种情况下,http 响应代码都应为 302。如果我在此代码上使用 curl ,它确实在两种情况下都显示响应代码 302,并且 curl -l일 수 있습니다. 우와.

하지만

내 단위 테스트에서는 httptest.newrecorder()来捕获信息,但它仅适用于get,不适用于post。因此,当我知道实际的重定向正在工作时,我需要弄清楚如何让单元测试工作。失败测试显示http响应代码是200而不是302(http.statusfound)을 사용합니다.

으아아아

이것은 독립적인 테스트입니다.

으아아아

실제 애플리케이션(표시되지 않음)에서 컬 포스트를 실행하면 작동하는 것을 볼 수 있습니다.

$ go run foo.go
post code 200
get code 302
로그인 후 복사

솔루션

tl;dr

해결책은 context.redirect 之后显式调用 context.writer.writeheadernow에 있습니다.

지침

이것은 gin.createtestcontext에서 반환된 gin 컨텍스트를 사용하는 극단적인 경우입니다.

get 요청의 경우 gin은 결국 http.redirect ,它将向响应写入一个简短的 html 正文(类似于 <a href="http://foobar.com">found</a> )을 호출하여 응답의 상태 코드가 기록됩니다.

게시물 요청의 경우 http.redirect 짧은 html 본문이 작성되지 않으며 응답에 상태 코드가 작성될 기회가 없습니다.

http.redirect의 구현을 참조하세요. 소스 코드에 따르면 content-type 헤더가 이전에 설정된 경우 get 요청에서도 동일한 문제가 발생합니다.

으아아아

해결책은 context.writer.writeheadernow:

을 명시적으로 호출하는 것입니다. 으아아아

gin 자체도 동일한 해결 방법을 사용합니다. 상대 경로를 사용하여 테스트 컨텍스트 렌더링 리디렉션을 참조하세요.

실제 서버 애플리케이션은 (*engine).handlehttprequest 将为我们调用 writeheadernow(소스 코드 참조)와 같은 문제를 겪지 않습니다. 그래서 나는 이것을 "버그"라기보다는 "에지 케이스"라고 부릅니다.

위 내용은 gin의 Context.Redirect에 대한 단위 테스트는 GET 응답 코드에서는 작동하지만 POST 응답 코드(golang)에서는 작동하지 않습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!