2012-03-20 7 views
1

私はリファクタリングの最中にあるレガシーシステムを持っています。Generate()メソッドの代理パラメータに対してMoqに何を供給しますか?

public class SUT 
{ 
    public delegate SaveStuff(SomeObject obj); 
    public void Generate(SaveStuff saver) 
    { 
    // Do stuff 
    var obj = new SomeObject(); 
    saver(obj); 
    } 
} 

私は部品番号を使用して非常に新たなんだ、と呼ばれる時代「セーバー」の数をカウントします:次のように

私は、実質的にオブジェクトを持っています。

私はSOに、ここで例の数を見てきましたが、どのようにセットアップ行く何テスト

[Test] 
public void TestDelegateCall() 
{ 
    var sut = new SUT(); 
    // Prepare SUT's State... 

    var callCount = 0; 
    sut.Generate(??); 
    Assert.AreEqual(callCount,2); 
} 

をするに困惑しています?ありますか?

私はちょうどそのすることができます、私はあなただけで次の操作を行うと、匿名メソッドとクロージャの利点を取ることができると信じて:)

var callCount = 0 
sut.Generate(obj=>callCount++); 

問題が解決しない場合、あなたはここにMOQを使用する必要があることを知らない

答えて

3

var callCount = 0 
SaveStuff actionCounter = delegate(SomeObject obj) 
    { 
     callCount++; 
    }; 
sut.Generate(actionCounter); 
+0

私はそれをコンパイルすることができませんでしたが、それは私が行く必要がある私を得た。 'SaveStuff actionCount =デリゲート(SomeObject obj){callCount ++; }; '働いた。正しい方向に私を指してくれてありがとう。 –

+0

甘い!あなたの単純な例に変更した後、R#は 'sut.Generate(obj => {callCount ++;});'にもっと洗練された助けとなり、別の問題を解決するのに役立ちました。あなたは私の理解を大幅に向上させました。ありがとうございました! –

+0

私は自分の答えが更新されているので、匿名の方法で作業する必要があります。しかし、古い代理人のアプローチを使用するようにコードを更新しました。私は両方をテストし、どちらもうまくいくはずです。あなたはあなたの最後のコメントから括弧を必要としません:) –

関連する問題