私は基本的に次のように見えるテスト中のコードを持っています(特定のコードは質問にとって重要ではありません。説明のためにここにあります):
public ICollection<Product> GetByCategory(string category, ISession session)
{
return session
.CreateCriteria(typeof(Product))
.Add(Restrictions.Eq("Category", category))
.List<Product>();
}
これはメソッドチェーンを使用します(そして私が探しているソリューションは流暢なインターフェース構文にも適用されます)。
私はこの特定の例の解決策を見つけることに興味はありません。より一般的な問題を解決することに興味があります。この例では、CreateCriteriaの期待値のみを追加したいと思います。ただし、これを行うと、CreateCriteriaにスタブを返さなくても、Addメソッドがnullを返すため、NullReferenceExceptionが発生します。
追加のメソッドがチェーンされている場合や、Addメソッドが削除されている場合でも、テストを引き続き機能させたいです。
メソッドチェーンを使用するときに、テストダブル/予想される呼び出しの数を、主張したいものだけに減らすための一般的なトリックはありますか?
私が考えることができる解決策は、型のすべてのメソッドを列挙し、異なるデフォルトの戻り値を与える期待値を持つスタブを作成するT4テンプレートを作成することです。しかし、もっと簡単なオプションがあるかどうか疑問に思っています。
私はRhino.Mocksを使用していますが、一般的な解決策をいただければ幸いです。