php エディター Strawberry は、テスト構造を反復中にエラーを見つけました。 error.As() を使用すると、errors.As に返される 2 番目のパラメータは、エラーではなくエラーへのポインタである必要があります。このエラーにより、プログラムが予期せぬ動作や不正な動作をする可能性があります。したがって、errors.As() を使用する場合は、パラメーターの型に注意し、問題の発生を避けるためにエラーへのポインターが渡されるようにしてください。この問題はテスト構造を反復処理するときに発生する可能性があるため、errors.As() を使用する場合は特に注意してください。
現在、関数が複数の種類のエラーを返す可能性があるパッケージの単体テストをいくつか書いています。構造を次のように定義します:
リーリーそして、errors.as()
を使用して、テストのエラーで test.err
を見つけたいと考えています。テストで使用した構造例は次のとおりです:
エラー インターフェイスを実装する 異なる
構造体タイプに errors.as を使用したいと考えています。したがって、構造からわかるように、err をエラーとして定義します。ご覧のとおり、エラー インターフェースを実装する &url.error{}
を使用しています。
ただし、上記のように errors.as
を使用すると、
私が理解しているところによると、errors.as() は any
を 2 番目の引数として受け入れます。そのため、なぜ *error を使用できないのか混乱しています。
また、テスト構造の err
フィールドを Interface{} に変更しようとしましたが、これにより、ターゲットがエラーに存在するかどうかに関係なく、すべてのアサーションが通過してしまいました。
上記と同様の方法でエラー インターフェイスを実装する別の種類のソリューションを実現する errors.as()
の使用方法が見つからないため、今は の使用に頼っています。代わりに contains()
が含まれます。誰かが洞察を提供できるかどうか疑問に思っています。
エラー型へのポインタが error
インターフェイスを満たしていないため、as
の 2 番目のパラメーターは # 型になります。 # #どれでも###。必要な型を .err
フィールドに直接保存するには、フィールドの型も any
である必要があります。
ただし、このポインタ値をインターフェイスでラップしているため、検査用の値を取得するには、型アサーションまたはリフレクションを使用する必要があります。
リーリー
以上がテスト構造を反復するときにerrors.As()を使用すると、2番目のパラメータがerrors.Asに*errorであってはなりません。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。