Go で時間に敏感なコードをテストする
ソフトウェア開発では、リアルタイムに依存するコードをテストするのが難しい場合があります。これは、time.Now() 関数を使用する場合に特に当てはまります。これは、現在のシステム時刻を返す非決定的な関数であるためです。
時間に依存するコードをテストする一般的なアプローチの 1 つは、カスタム コードを実装することです。 Clock などのインターフェイス。現在時刻を取得したり、一定期間スリープしたりするためのメソッドを定義します。これにより、テストで使用できる Clock インターフェイスのモック実装を作成できます。
ただし、コード全体の複数の場所で time.Now() が呼び出される場合、この方法は面倒になる可能性があります。経過時間を追跡するために変数を渡すのを避けるために、time.Now() をグローバルにスタブアウトする別の方法があるかどうか疑問に思うかもしれません。
システム クロックの変更
テストの実行中にシステム クロックを変更することは一般的に推奨されません。これは、コードの他の部分やシステム自体に予期せぬ結果をもたらす可能性があります。
カスタム時間パッケージ
代わりに、ラップアラウンドする独自の時間パッケージを作成することを検討できます。標準の図書館時間パッケージ。このカスタム パッケージは、テスト用の模擬時間ライブラリに切り替える方法を提供します。これにより、テストの時間の経過をより簡単に制御できるようになります。
ベスト プラクティス
最終的に、時間に敏感なコードを設計およびテストする最善の方法は、静的変数の使用を最小限に抑え、コードを可能な限りステートレスにすることです。機能をテスト可能なステートレスな部分に分割すると、テストが簡素化され、同時実行性が向上します。
以上がシステムクロックを変更せずに、時間に敏感な Go コードを効果的にテストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。