ホームページ >バックエンド開発 >C++ >「DateTime.Now」に依存するコードを効果的に単体テストする方法

「DateTime.Now」に依存するコードを効果的に単体テストする方法

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-12 06:36:42314ブラウズ

How to Effectively Unit Test Code Dependent on `DateTime.Now`?

単体テストでの時間依存性の分離

DateTime.Now に依存するコードのテストには、独特の課題が伴います。 システム クロックに対して直接テストすると不安定になり、テストの信頼性が低くなります。 この依存関係を管理するための 2 つの効果的なアプローチを次に示します。

アプローチ 1: 依存性の注入

推奨される方法は、時間依存性を抽象化することです。 現在時刻を取得するメソッドを定義するインターフェース (例: ITimeProvider) を作成します。 このインターフェースは、SystemTimeProvider を使用する具象クラス (例: DateTime.Now) で実装します。現在時刻を必要とするクラスにこのインターフェイスを挿入します。

単体テスト中に、事前に決定された ITimeProvider 値を返すモック DateTime を挿入できます。これにより、システム クロックに影響を与えることなく、テストに使用される時間を完全に制御できます。

アプローチ 2: アンビエント コンテキスト (注意)

もう 1 つのオプションには、静的コンテキストの使用が含まれます。アクティブな時間プロバイダーを保持する静的な TimeProvider プロパティを持つ基本クラス (例: Current) を作成します。 デフォルトの実装 (例: SystemTimeProvider) を最初に設定できます。

テストの場合、静的 Current プロパティをオーバーライドしてモック プロバイダーを使用します。 重要なこと、後続のテストで予期しない動作が発生しないように、各テストの後に Current プロパティをデフォルトにリセットすることを忘れないでください。このアプローチでは、テストの干渉を避けるために細心の注意を払ってクリーンアップする必要があります。

概要

どちらの方法でも、単体テストの時間依存性を効果的に分離できます。 ただし、依存関係の注入は、静的なアンビエント コンテキストを使用する場合と比較して、デザインがすっきりし、意図しない副作用のリスクが軽減されるため、一般に好まれます。

以上が「DateTime.Now」に依存するコードを効果的に単体テストする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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