2011-10-28 4 views
4

私はこれのための解決策を見つけようとしてきましたが、間違った検索語を探していたのですが、まだ私の質問に対する回答ではありません。Molesを使用して、C#のメソッドへの複数の呼び出しに異なる値を返すにはどうすればよいですか?

問題: ユニットテストを作成する方法があります。このメソッド内には、私が実際に解決できない外部依存関係があるので、私はユニットテストを作成するためにMolesを使用する必要があります。

この外部依存関係は、複数回呼び出されたインスタンス上のメソッドと、2回目はMolesで別の値を返したいと考えています。

... 
bool myVar = SomeInstance.SomeMethod(); // Here I'd like to return true 
if(myVar) 
... 
... 
bool myOtherVar = SomeInstance.SomeMethod(); // Here I'd like to return false 
... 

は今、通常、私は

MSomeInstance.SomeMethod.AllInstances.SomeMethod = @this => true; 

ようにそれを設定するしかし、どのように私は両方の通話ごとに異なる振る舞いを持つことができますか?上記の "false"が返された後に別の行を書き込むと、最初の行が上書きされるため、結果として常にfalseになります。

アイデア?

答えて

2

それは少し醜いが、可能です:

var toggle = false; 
MSomeInstance.SomeMethod.AllInstances.SomeMethod = 
    @this => { toggle = !toggle; return toggle; }; 

最初の呼び出しは、二falseをtrueを返します。

+0

これは一般的にジョブを完了させます。インデックスとIEnumerableを組み合わせて、後続の呼び出しが連続したエントリを順番に返すようにすることができます。 –

+0

ありがとう、そのような解決策を考えていなかった、それはうまく動作している(とにかく特別なケースです):-) – Gorgsenegger