2012-05-17 52 views
3

我想模擬MVC對象HttpPostedFileWrapper,所以我可以測試「ContentType」和「InputStream」屬性特別。設置我的模擬像這樣:模擬HttpPostedFileWrapper

var mockPostedFile = new Mock<HttpPostedFile>(); 
var mockFileWrapper = new Mock<HttpPostedFileWrapper>(mockPostedFile); 
mockFileWrapper.Setup(file => file.ContentType).Returns("application/pdf"); 
mockFileWrapper.Setup(file => file.InputStream).Returns(fileStream); 

,但我得到的第一行此異常:

類型嘲笑必須是一個接口或抽象或不密封類。

如果我改變HttpPostedFileHttpPostedFileBase我得到這個例外,當我打電話mockFileWrapper.Object

無法實例類的代理:System.Web.HttpPostedFileWrapper。 找不到那樣會匹配給定參數的構造函數: Moq.Mock`1 [System.Web.HttpPostedFileBase]

有誰知道我能做些什麼來拉動這一關?

+0

你確定你嘗試過'HttpPostedFileBase'嗎?它*只*具有無參數的構造函數。 –

回答

7

你應該嘲笑HttpPostedFileBase而不是HttpPostedFileWrapper

+0

這個改變訣竅。我不得不改變我測試的方法來取代HttpPostedFileBase而不是HttpPostedFileWrapper,但它在這種改變下運行良好。 – CodeGrue

0

你不能嘲笑沒有公共構造函數的類型,如HttpPostedFile

+0

我很欣賞評論,但這並不能解決問題。 – CodeGrue

+0

@CodeGrue:你不能完全不支持你正在使用的框架完全不支持的東西,就是這樣。 – abatishchev