您好我是TDD开发的新手。
我发现Using asp.net mvc to upload file的这篇文章
Phil Haack说一个类可以用于文件上传控制,他使用默认的HttpFileCollectionValueProvider:
[HttpPost] public ActionResult Index(HttpPostedFileBase file) { if (file.ContentLength > 0) { var fileName = Path.GetFileName(file.FileName); var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName); file.SaveAs(path); } return RedirectToAction("Index"); }
该值以
的形式界定<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方法?
我不太确定如何对此进行单元测试。在测试控制器文件中,我应该有一个假的HttpPostedFileBase但它是密封的。有没有人有办法解决这个问题?
非常感谢!
答案 0 :(得分:7)
我很抱歉,如果这不是你要问的,但我只是在你的测试中模拟HttpPostedFileBase:
var file = MockRepository.GenerateStub<HttpPostedFileBase>();
然后设定任何期望:
file.Expect(f => f.ContentLength).Return(1);
file.Expect(f => f.FileName).Return("myFileName");
然后将其传递给您的控制器方法:
controller.Index(file);
这样您就可以模拟文件的行为。我不确定.SaveAs - 你是否已经覆盖了这种方法?