2011-02-04 9 views
1

新しいDate()を使用するコードがユニットテストに非常に難しいという問題を解決する共通の知識パターンまたはイディオムがありますか?ユニットテストの現在の日付問題のパターン

私は可能な解決策を知っています(たとえばhttp://refactoringaspnet.blogspot.com/2010/02/unit-testing-code-which-is-dependent-on.html)が、この問題の共通のパターンと言語があるかどうかが問題です。

+0

http://stackoverflow.com/questions/4454106/how-can-i-mock-jodatime-actual-date – skaffman

+0

を参照してください。しかし、これは単なる別の解決策です。私はパターンとそれに共通する言語を探していますが、それは誰もが自分のやり方でやっているようです。ソリューションが単純であっても、パターン/イディオムはコミュニケーションに役立ちます。 – bertolami

答えて

1

私が時々行うことは、日付を返す責任を負うInterfaceを構築することです。例えば :ユニットテストのために必要な場合、これは、次いで

public interface ISystemClock 
{ 
    DateTime GetCurrentDate(); 
} 

アウトモックすることができます。私が誤ってあなたのニーズを理解していない場合は

+0

私はこれを試していますが、私はそれに問題があります。ここで私のポストは、見てみることができますか? http://stackoverflow.com/questions/6049777/mockito-how-to-mock-an-interface-of-jodatime –

0

、あなたは「モック」を探している:

の一部ではありませんいくつかの基本的なコードのための偽の実装を提供しています

いくつかのロジックを正常にテストするためには、正常に動作する必要があります。

+0

Javaではそれほど些細なことではないし、Calendar.getInstance()を模擬するのはあまり良いことではないかもしれない。 – bertolami

+0

.NETでは、「Moles」と呼ばれる優れたプロジェクトがあり、どのアセンブリでもどのクラスでも模擬バージョンを作成できます(Javaの「アセンブリ」は「jar」と考えています)。たとえば、DateTime.Nowを使用している場合、MolesはMDateTime.Now "Mocked DateTime"を作成し、ラムダ式を設定することによって "NoW"の動作を変更できます。多分JavaにはMolesのようなものがありますか? –

0

それです。あなたは時間の読書を偽装/偽装する必要があります。これは、単にシステム時間を越えることができます。一般的な「環境」インターフェースを使用すると、テストのための他の非決定的要因を制御することができます。

0

アイデアは、インターフェイスの後ろでテストするのが難しい(つまり、単体テストの目的で制御するのが難しい)ものを単純に移動することです。あなたに必要なコントロールを与える擬似またはモックでそれをフォローアップしてください。

質問でリンクしたブログポストは大部分が正しいです。しかし、私は個人的に、依存関係をインスタンス化するTestableClockを作成する最後のビットは行いません。私はctor引数またはメソッドのパラメータとして渡すことをお勧めします。

関連する問題