2009-06-04 23 views
1

私は嘲笑するのが初めてです。私はHttpPostedFileBaseをRhino Mocksでモックする方法について少し指導が必要です。Rhino MockでHttpPostedFileBaseを嘲笑します

[Test] 
    public void Should_return_a_byte_array_with_a_length_of_eleven() 
    { 
     // Arrange 
     var stream = new MemoryStream(System.Text.Encoding.Default.GetBytes("TestContent")); 
     var httpPostedFileBase = MockRepository.GenerateMock<HttpPostedFileBase>(); 

     httpPostedFileBase.Expect(x => x.InputStream).Return(stream); 
     httpPostedFileBase.Expect(x => x.ContentLength).Return(11); 

     // Act 
     var byteArray = httpPostedFileBase.ToByteArray(); 

     // Assert 
     Assert.That(byteArray.Length, Is.EqualTo(11)); 
    } 

私は値が設定され得ることを伝えることができますが、私のextensionmethodがHttpPostedFileBaseを取得する時点で、それは失った:私は私のToByteArray()の拡張が期待通りに動作し、これは私がこれまで持っているものであることを確認しようとしていますそれはすべて価値です。どんな助けでも大歓迎です。

/クリストファー

答えて

2

可能な限り、あなたはあなたの実装はあなたが期待するものであることを確認するために、モック避けなければなりません。代わりに、いくつかの特定の入力については、出力が期待どおりであることをテストしてください。

つまり、あなたの例にはいくつかの重要なことがありません。あなたはモックを使用する場合は、あなたが期待を設定し終わったときに呼び出すことによって、(そうでない場合は、さらに期待など、すべてのメソッド呼び出しとそのようなものを記録します)それらを伝える必要があります。

httpPostedFileBase.Replay(); 

そして最後にアサート段階では、

httpPostedFileBase.VerifyAllExpectations(); 

また、Rhinoでは仮想メソッドとプロパティのみをモックできます。

+0

ご返信ありがとうございます! 私はこれを試しましたが、私はまだ "期待されています:11しかし:0"です。 ToByteArray()とVerifyAllExpectations()をToByteArray()の後に呼び出す前に、Replay()を配置します。 私は前に嘲笑についてあなたの議論を聞いたことがあるが、私はそれを別の方法でこれを確認する方法をundestand確かではない。あなたはどうしたのですか? –

+0

私の期待通りにRepeat.Any()を設定した後、あなたの提案がうまくいっています。 しかし、私はまだあなたがそれをどうやってやり遂げることができるかに興味があります。 –

+0

いくつかのテストコンテンツでHttpPostedFileの実際のインスタンス(またはHttpPostedFileBaseのいくつかの派生物)を構築することができれば、その上で拡張メソッドを呼び出すことができます。しかし、私はHttpPostedFileクラスが100%確実であるとは限りません。 – Rytmis