1

IEnumerable<IDomainInterface>クラスに渡されたものがあり、すべてのアイテムに対して特定のメソッドが呼び出されたかどうかをテストしたいと思います。

// in class
var result = _items.SelectMany (x => x.Get (something));

// in test
domainInterfaceMock.Expect(x => x.Get (something));

ステートメントに追加ToArray()した場合にのみ、テストに合格します...SelectMany()

そのような状況にどのように対処すればよいですか?

4

2 に答える 2

1

これは、Get() が呼び出されるのは、LINQ 式が評価されるとき (つまり、反復処理されるとき) だけだからです。クラスのメソッドが Get() を呼び出している場合は、それ以上のことをしている必要があります。

var result = _items.SelectMany (x => x.Get (something));

...これ自体は Get() の呼び出しにはなりません。これを反映するようにテストを変更する必要があります。

更新: メソッドをテストしているので、メソッドへの入力をモックアップして実際のメソッドに渡し、これらの入力と結果に対する期待をテストする必要があります。メソッドが LINQ 式自体を評価する場合は、Get() を呼び出すことがわかりますが、LINQ 式自体を評価しない場合は、.ToArray() で評価を強制することで正しいことを行っています。

.ToArray() を呼び出すことにより、より正確には、メソッドの戻り値が期待どおりであることを実証しようとしていますが、これを直接行うには、返された式を分析する必要があります。証明したい唯一の事実が、式がそのすべてのメンバーに対して Get() を呼び出すことである場合、実行していることはそれを達成します。

于 2012-10-22T00:04:47.333 に答える
0

xがモック可能である場合(つまり、インターフェイスまたは抽象クラス)、Get()メソッドを作成するxのモックされたインスタンスごとに呼び出されることを確認できます。

于 2012-10-21T23:58:21.210 に答える