ホームページ >バックエンド開発 >Golang >タイムアウトを true にして単体テストの DeadlineExceededError を作成する

タイムアウトを true にして単体テストの DeadlineExceededError を作成する

WBOY
WBOY転載
2024-02-09 13:00:18724ブラウズ

タイムアウトを true にして単体テストの DeadlineExceededError を作成する

php エディタ Xiaoxin は、単体テストに関するヒントを紹介します。タイムアウトのある単体テストでは、deadlineExceededError: true を作成します。単体テストを実行する際、テスト実行のタイムアウトが発生する場合がありますが、この場合はdeadlineExceededErrorをtrueに設定することで解決できます。この手法は、テストの実行時間をより適切に制御および管理し、テストの精度と信頼性を確保するのに役立ちます。次に、この手法を使用して単体テストの効率と信頼性を向上させる方法を詳しく紹介します。

質問の内容

プロジェクトで単体テストを作成しようとしています。そこでは、http クライアントをシミュレートし、クライアントが返す必要がある応答を設定します。 http クライアントがタイムアウトで失敗した場合にコードがそれに応じて動作する必要があるため、この動作が必要です。そのため、http クライアントをモックして DeadlineExceededError を返し、そこから単体テストを行う必要があります。

これまでに試したことは、client.do が返す方法でクライアントの do 関数をシミュレートすることです:

リーリー

これは動作しますが、完全には動作しません。つまり、このシミュレートされた動作でコードを実行すると、返されるエラーの種類は次のとおりです。

リーリー

これも正しいですが、完全に正しいわけではありません。なぜ?なぜなら、コードを実行して実際のタイムアウトが発生した場合、より完全なものが得られるからです。 リーリー

私が最も興味があるのは、

timeout: true です。モックにそれを返すように指示できたら、これをアサートすることができます。これは、返されたエラーのタイプが deadlineexceedederror であることを単にアサートするよりも完全であることがわかります。

解決策

過度に複雑なテストを避けるために、このアプローチを採用することをお勧めします。まず、エラーを定義することから始めます:

リーリー

このように、

timeouterrorerror() インターフェイスと timeout インターフェイスの両方を実装します。 次に、http クライアントの偽装を定義する必要があります:
リーリー

これは、上で定義したエラーと

nil を http.response として返すだけです。最後に、サンプル単体テストの作成方法を見てみましょう: リーリー

このテストをデバッグし、

err 変数でデバッガーを一時停止すると、望ましい結果が表示されます。 こうすることで、複雑さを増すことなく、必要な機能を実現できます。効果があるかどうか教えてください。

以上がタイムアウトを true にして単体テストの DeadlineExceededError を作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。