>  기사  >  백엔드 개발  >  테스트 구조를 반복할 때 오류.As()를 사용하여 두 번째 매개변수를 오류로 반환합니다. As는 *error가 되어서는 안 됩니다.

테스트 구조를 반복할 때 오류.As()를 사용하여 두 번째 매개변수를 오류로 반환합니다. As는 *error가 되어서는 안 됩니다.

PHPz
PHPz앞으로
2024-02-15 14:06:07484검색

在迭代测试结构时使用errors.As(),将第二个参数返回给errors.As 不应该是*error

php 편집기 Strawberry는 테스트 구조를 반복하는 동안 오류를 발견했습니다. 오류.As()를 사용할 때 두 번째 매개변수는 오류로 반환됩니다. As는 오류가 아닌 오류에 대한 포인터여야 합니다. 이 오류로 인해 프로그램이 예기치 않게 또는 잘못 작동할 수 있습니다. 따라서 error.As()를 사용할 때는 매개변수의 유형에 주의하고 문제가 발생하지 않도록 오류에 대한 포인터가 전달되는지 확인하십시오. 이 문제는 테스트 구조를 반복할 때 발생할 수 있으므로 error.As()를 사용할 때 특별한 주의를 기울이십시오.

질문 내용

현재 함수가 여러 유형의 오류를 반환할 수 있는 패키지에 대한 단위 테스트를 작성하고 있습니다. 나는 구조를 다음과 같이 정의합니다:

으아악

사용하고 싶고errors.as() 在我测试的错误中查找 test.err . 테스트에 사용한 예제 구조는 다음과 같습니다.

으아악

오류 인터페이스를 구현해야 하는 errors.as 用于实现错误接口的不同结构类型。因此,正如您在结构中看到的那样,我将 err 定义为错误。可以看出,我使用 &url.error{}를 추가하고 싶습니다.

으아악

그러나 위와 같이 errors.as를 사용하면

가 반환됩니다. 으아악

내가 이해한 바에 따르면 error.as()는 any를 두 번째 인수로 허용하므로 *error를 사용할 수 없는 이유가 무엇인지 혼란스럽습니다.

또한 테스트 구조의 err 필드를 인터페이스{}로 변경하려고 시도했지만 이렇게 하면 대상이 오류에 있는지 여부에 관계없이 모든 어설션이 통과되었습니다.

errors.as()를 사용하여 위와 유사한 방식으로 오류 인터페이스를 구현하는 다른 유형의 솔루션을 구현하는 방법을 찾을 수 없으므로 이제는 contains를 사용합니다. () 코드> 대신. 누구든지 통찰력을 제공할 수 있는지 궁금합니다. errors.as() 来实现以与上面类似的方式实现错误接口的不同类型的解决方案,所以现在我依靠使用 contains() 来代替。想知道是否有人可以提供一些见解。

解决方法

指向错误类型的指针不满足 error 接口,这就是为什么 as 的第二个参数的类型为 any。为了将您想要的类型直接存储在 .err 字段中,该字段也必须是 any

해결 방법

오류 유형에 대한 포인터가 error 인터페이스를 충족하지 않으므로 as의 두 번째 매개 변수가 🎜 유형입니다. 원하는 유형을 .err 필드에 직접 저장하려면 해당 필드도 🎜 유형이어야 합니다. 🎜 🎜그러나 이 포인터 값을 인터페이스에 래핑했으므로 검사할 값을 얻으려면 유형 어설션이나 리플렉션을 사용해야 합니다. 🎜 으아악

위 내용은 테스트 구조를 반복할 때 오류.As()를 사용하여 두 번째 매개변수를 오류로 반환합니다. As는 *error가 되어서는 안 됩니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제