ホームページ >バックエンド開発 >Golang >テストのために「time.Now()」をグローバルに効果的にスタブするにはどうすればよいですか?

テストのために「time.Now()」をグローバルに効果的にスタブするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-22 10:37:59424ブラウズ

How Can I Effectively Stub `time.Now()` Globally for Testing?

Global Stubbing of time.Now()

テストでは、コードの時間依存の側面を制御することが重要になります。ただし、time.Now() をグローバルにスタブアウトすることは、複数のコード セクションにわたって広く使用されているため、困難になる可能性があります。

推奨されるアプローチ: カスタム時間インターフェイス

を使用する現在の実装カスタム インターフェイスは効果的なソリューションです。アプローチの概要は次のとおりです。

  1. メソッド Now() および After(d time.Duration) を使用して Clock インターフェイスを定義します。
  2. 具体的な実装 (例: realClock) を作成します。標準時間パッケージと同様に動作します。
  3. テスト用のモック実装を作成します (例: mockClock).

代替手段

予期しない依存関係が生じる可能性があるため、テスト中にシステム クロックを変更することは強くお勧めしません。

制限

スタブout time.Now() にはグローバルに制限があります。たとえば、テスト対象のコードがシステム時間に依存するサードパーティ ライブラリを使用している場合、その動作をオーバーライドできない可能性があります。

ステートレス コードの利点

ステートフル性をできるだけ少なくしてコードを設計すると、テストが簡素化され、同時実行が容易になります。機能をテスト可能なステートレスなコンポーネントに分割することで、テスト中に時間に依存する側面を制御しやすくなります。

以上がテストのために「time.Now()」をグローバルに効果的にスタブするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。