2017-09-14 174 views
1
public async Task<HttpResponseMessage> UpdateUserProfile(HttpPostedFile postedFile) 
{ 
    //update operations 
} 

我有哪裏我更新使用HttpPostedFile一個人的圖像的方法UpdateUserProfile。它從Postman/Swagger工作正常。現在我正在寫UnitTestCases。我有下面的代碼模擬HttpPostedFile在單元測試

public void UpdateUserProfile_WithValidData() 
{ 
    HttpPostedFile httpPostedFile; 
    //httpPostedFile =?? 

    var returnObject = UpdateUserProfile(httpPostedFile); 

    //Assert code here 
} 

現在我已經從手工代碼,我試圖做的,但不能給映像文件HttpPostedFile對象。請建議我如何在單元測試中進一步進行模擬圖像。

+0

這已經得到解決? – Nkosi

+0

都能跟得上@Nkosi我的應用程序專門使用HttpPostedFile,所以沒有把它改成HttpPostedFileBase – thecrusader

回答

0

HttpPostedFile被密封並且具有內部構造。這很難嘲笑你的單元測試。

我建議改變你的代碼中使用抽象HttpPostedFileBase

public async Task<HttpResponseMessage> UpdateUserProfile(HttpPostedFileBase postedFile) 
    //update operations 
} 

因爲它是一個抽象類,這將允許你通過繼承直接或通過嘲弄框架創建嘲弄。

例如(使用MOQ)

[TestMethod] 
public async Task UpdateUserProfile_WithValidData() { 
    //Arrange 
    HttpPostedFileBase httpPostedFile = Mock.Of<HttpPostedFileBase>(); 
    var mock = Mock.Get(httpPostedFile); 
    mock.Setup(_ => _.FileName).Returns("fakeFileName.extension"); 
    var memoryStream = new MemoryStream(); 
    //...populate fake stream 
    //setup mock to return stream 
    mock.Setup(_ => _.InputStream).Returns(memoryStream); 

    //...setup other desired behavior 

    //Act 
    var returnObject = await UpdateUserProfile(httpPostedFile); 

    //Assert 
    //...Assert code here 
}