テストのために time.Now() をグローバルにスタブアウトする方法
コーディングでは、一部の要素は時間に依存するため、操作が必要になる場合があります。テスト目的のための時間。 1 つの方法は、テスト内で time.Now() をスタブアウトすることです。ただし、time.Now() は頻繁に呼び出されるため、実際のスリープ経過時間を監視するために変数のメンテナンスが必要になります。
この記事では、time.Now() をグローバルにスタブアウトするための代替アプローチを検討します。カスタム インターフェイスと、変更された「time」パッケージを作成する可能性。
カスタム インターフェイスアプローチ
カスタム インターフェイス メソッドには、次のようなインターフェイスの実装が含まれます。
type Clock interface { Now() time.Time After(d time.Duration) <-chan time.Time }
このインターフェイスは Now() メソッドと After() メソッドのプレースホルダーを提供し、テストと運用のための特定の実装を定義します。例:
type realClock struct{} func (realClock) Now() time.Time { return time.Now() } func (realClock) After(d time.Duration) <-chan time.Time { return time.After(d) }
潜在的な問題
カスタム インターフェイスのアプローチは効果的ですが、次のような注意点があります。
のグローバル置換を提供しません。 代替アプローチ
注意:
テストの実行中または一般にシステム時刻を変更することは、予期しない依存関係やデバッグの問題につながる可能性があるため推奨されません。
結論
スタブアウトtime.Now() をテストのためにグローバルに使用するには、慎重な検討が必要です。カスタム インターフェイスのアプローチは実行可能なオプションですが、さらに複雑になる可能性があります。あるいは、変更された「時間」パッケージを作成するか、ステートレス コンポーネントを使用してコードを設計して、テストを簡素化することもできます。
以上がテストを容易にするために「time.Now()」をグローバルにスタブアウトする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。