2009-06-04 186 views
1

我是新來嘲笑,所以我需要一點關於如何嘲笑HttpPostedFileBase犀牛嘲笑的指導。我想驗證我的ToByteArray()擴展按預期工作,這是我到目前爲止有:嘲笑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它已經失去了所有的價值。任何幫助將非常感激。

/的Kristoffer

回答

2

只要有可能,應避免爲了嘲諷來驗證你的代碼是你所期望的。相反,有利於對某些特定輸入進行測試,輸出結果就是您所期望的。

這就是說,你的例子缺少一些關鍵的東西。當您使用模擬考試,你需要告訴他們,當你設置完期望通過調用(否則他們將記錄所有的方法調用和諸如此類的進一步預期):

httpPostedFileBase.Replay(); 

終於在斷言階段,驗證您的期望:

httpPostedFileBase.VerifyAllExpectations(); 

另請注意,使用Rhino,您只能模擬虛擬的方法和屬性。

+0

感謝您的回覆! 我試過這個,但我仍然在「預計:11但是:0」。在ToByteArray()和ToByteArray()之後調用ToByteArray()和VerifyAllExpectations()之前,我放置了Replay()。 我以前聽說過有關嘲笑的觀點,但我不確定我是否會以另一種方式驗證這一點。你會如何做到這一點? – 2009-06-04 12:36:24