Asp.net-Mvc

如何對 Asp.net MVC 文件進行單元測試

  • June 19, 2012

您好,我是 TDD 開發的新手。

我遇到了這篇使用 asp.net mvc 上傳文件
的文章 Phil Haack 指出一個類可以用於文件上傳控制,他在其中使用預設的 HttpFileCollectionValueProvider:

[HttpPost]
公共 ActionResult 索引(HttpPostedFileBase 文件){

if (file.ContentLength > 0) {
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
文件.另存為(路徑);
}

return RedirectToAction("索引");
}

該值的範圍為

<form action="" method="post" enctype="multipart/form-data">
 <label for="file">Filename:</label>
 <input type="file" name="file" id="file" />
 <input type="submit" />
</form>

請注意,HttpPostedFileBase 被解析為 html 表單中名稱為“file”的控制器中的參數,以及索引控制器中的解析參數。

我有兩個問題:

  1. 如何驗證 file.SaveAs 方法?

  2. 我不太確定如何對此進行單元測試。在測試控制器文件中,我應該有一個假的 HttpPostedFileBase 但它是密封的。有沒有人有一些策略來解決這個問題?

非常感謝!

如果這不是您所要求的,我深表歉意,但我會在您的測試中簡單地模擬 HttpPostedFileBase:

var file = MockRepository.GenerateStub<HttpPostedFileBase>();

然後設定任何期望:

file.Expect(f => f.ContentLength).Return(1);
file.Expect(f => f.FileName).Return("myFileName");

然後將其傳遞給您的控制器方法:

controller.Index(file);

這樣您就可以模擬文件的行為。我不確定 .SaveAs - 你重寫了這個方法嗎?

引用自:https://stackoverflow.com/questions/5515404