2011-11-24 3 views
0

私はプロトコルハンドラの辞書リストを期待する関数へのインターフェイスを渡し、次のコードを、持っている:私のインターフェイスでMoqの設定方法が欠けているのはなぜですか?

var _protocolHandlers = new Dictionary<EmailAccountType, IEmailTransportHandler> 
         { 
          {EmailAccountType.Pop3, new Mock<IEmailTransportHandler>().Object}, 
          {EmailAccountType.IMAP, new Mock<IEmailTransportHandler>().Object} 
         }; 

奇妙なことは、次のコードは、上の私のセットアップ方法を与えないこと、しかしであります嘲笑対象:

_protocolHandlers[0].<where are set-up methods??> 

は、これらがインタフェースを取るよう、サービスのコンストラクタに渡され、通常のインターフェイスを持つ規則に従っているようだが、彼らは.Object()を使用して注入します。

ここで何が起こっているのか誰かが気付いていますか?

答えて

5

セットアップ方法はモック「コンテナ」、で渡されたものではありません、実際の嘲笑のオブジェクトの上にある。

あなたが前にあなたのモックを作成する場合は、セットアップにアクセスできるようになります、その後渡しますオブジェクト内:

[TestFixture] 
public class MyTest 
{   
    Dictionary<EmailAccountType, IEmailTransportHandler> _protocolHandlers; 
    Mock<IEmailTransportHandler> _mockEmailTransportHander = new Mock<IEmailTransportHandler>();   

    [SetUp] 
    public void Init() 
    { 
     _protocolHandlers = new Dictionary<EmailAccountType, IEmailTransportHandler> 
        { 
         {EmailAccountType.Pop3, _mockEmailTransportHander.Object}, 
         {EmailAccountType.IMAP, _mockEmailTransportHander.Object} 
        }; 
    } 

    [Test] 
    public void Test1() 
    { 
     _mockEmailTransportHander.Setup(m => m.Test()).Returns(false); 
     // Rest of test 
    } 

    [Test] 
    public void Test2() 
    { 
     _mockEmailTransportHander.Setup(m => m.Test()).Returns(true); 
     // Rest of test 
    } 
} 
+0

こんにちは、ありがとう。 My _protocolHandlersはNUnit TextFixture :: Setup()でインスタンス化されます。私は各テスト内でセットアップを呼び出す必要があります(つまり、辞書オブジェクトのモックをセットアップします)。しかし、あなたの例から、これは遅すぎるように見えます...? – jaffa

+0

@jaffa nunitでどのように動作するのか、私の答えを更新しました –

+0

こんにちは、これは大変感謝しています!私は辞書に追加するために使用される元の参照を使用します。まだ私はこれをディクテーションから外すことができません。オブジェクト?私はペニーが落ちると確信しています;) – jaffa

関連する問題