2011-08-06 4 views
1

を期待することを主張しますのChimeManagerは複数回呼び出されます と私はそれが私のメソッドに一致する前に呼び出される必要がある方法を指定したくない。Rhinoのモックは、任意のコール・マッチが引数私は、次のコードをテストしたい

// i dont like this repeat twice because this ties the test code to much to the production code 
ChimeManager.AssertWasCalled(x => x.AddConfig(Arg<ChimeConfigData>.Matches(
     y => y.Key == ChimeKey.Create(ChimeType.HighChime, callQueueData.Name)), 
     y => y.Repeat.Twice)); 

私はむしろ何かのように言いたい:

ChimeManager.AssertWasCalled(x => x.AddConfig(Arg<ChimeConfigData>.Matches(
     y => y.Key == ChimeKey.Create(ChimeType.HighChime, callQueueData.Name)), 
     y => y.Repeat.Any/y.Match.Any)); 

Unfortunatley Repeat.Any、この場合では無効である、任意のは、何のMatch.Anyありません。

このメソッドが指定された引数で呼び出されたと主張できますが、呼び出される頻度は関係ありません。メソッドへの呼び出しの1つが、アサーション以外の指定された引数と一致しても失敗することはありません。

答えて

2

メソッドの実装を検証するためのテストを作成する代わりに、メソッドの結果を検証するテストを作成します。この場合、_chimeManagerが正しく設定されているかどうかを確認する必要があります。

単純にデータを送信して結果を検証するテストを作成すると、単体テストは時間の経過とともに破損する可能性が低くなります。将来のある時点で、_chimeManagerの集団が、データベース呼び出しまたはメソッドの追加以外の方法で発生するとします。実装に対してテストを書くと、テストは中断されます。ただし、特定の入力がある場合、_chimeManagerに適切な値が入力されていることを確認するだけのテストを作成すると、「方法」が変更されたときに破損しないテストが得られます。

+0

okこれは、私がこのシナリオで "実際の" ChimeManagerを使用し、嘲笑されていないChimeManagerを使用し、ChimeManagers設定をアサートする必要があることを意味します。私はそれを嘲笑すべきだと思ったので、私はこの新しいアプローチが好きです。どうも – leozilla

関連する問題