asp.net-mvc-3 – 单元测试一个文件上传,怎么样?
|
使用MVC3.NET我有一个文件上传方法在一个控制器工作正常与以下签名公共ActionResult UploadFile(IEnumerable< HttpPostedFileBase>文件) 如何用NUnit单元测试?我周围环顾四周,每个人似乎都指向Moq,但我是新进单位测试,不能让Moq工作. 我发现有趣的博客,例如:http://danielglyde.blogspot.com/2011/07/tdd-with-aspnet-mvc-3-moq-and.html,但我很难想出如何做“假”文件上传也是一样的,我也很担心,我已经设法找到的moq示例很多似乎有其中已弃用的代码. 我只想知道我如何模拟一个HttpPostedFileBase,所以我可以使用Moq或其他方式来测试我的上传代码 – 如果有人可以给我一些关于如何做的代码示例,我将非常感激. 以下代码从其他示例中获取: var file = new Mock<HttpPostedFileBase>();
file.Setup(f => f.ContentLength).Returns(1);
file.Setup(f => f.FileName).Returns("test.txt");
controller.upload(file);
当我尝试编译时会产生以下错误:
我已经改变了采用单一HttpPostedFileBase的方法,而不是一个IEnumerable,因为能够“嘲笑”一个是我正在为了这个问题的目的而着重关注的. 解决方法假设标准文件上传操作:[HttpPost]
public ActionResult UploadFile(IEnumerable<HttpPostedFileBase> files)
{
foreach (var file in files)
{
var filename = Path.Combine(Server.MapPath("~/app_data"),file.FileName);
file.SaveAs(filename);
}
return View();
}
你可以这样测试: [Test]
public void Upload_Action_Should_Store_Files_In_The_App_Data_Folder()
{
// arrange
var httpContextMock = new Mock<HttpContextBase>();
var serverMock = new Mock<HttpServerUtilityBase>();
serverMock.Setup(x => x.MapPath("~/app_data")).Returns(@"c:workapp_data");
httpContextMock.Setup(x => x.Server).Returns(serverMock.Object);
var sut = new HomeController();
sut.ControllerContext = new ControllerContext(httpContextMock.Object,new RouteData(),sut);
var file1Mock = new Mock<HttpPostedFileBase>();
file1Mock.Setup(x => x.FileName).Returns("file1.pdf");
var file2Mock = new Mock<HttpPostedFileBase>();
file2Mock.Setup(x => x.FileName).Returns("file2.doc");
var files = new[] { file1Mock.Object,file2Mock.Object };
// act
var actual = sut.UploadFile(files);
// assert
file1Mock.Verify(x => x.SaveAs(@"c:workapp_datafile1.pdf"));
file2Mock.Verify(x => x.SaveAs(@"c:workapp_datafile2.doc"));
}
显然,所有的HttpContext设置部分应该被外部化为可以在单元测试的[SetUp]阶段中调用的reusable class,以准备被测试对象的模拟上下文,并避免在每个单元测试中重复它. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 维护消息完整性
- asp.net – 将appsettings.production.json发布到azure上
- asp.net-mvc – 如何让ASP.NET MVC在IIS 6中运行?
- asp.net – gridview在viewstate中保存数据吗?
- asp.net-core – 如何为asp.net vnext使用不同的.net语言(F
- asp.net-mvc – ASP.net MVC返回文件和重定向
- asp.net – Web.config允许特定用户的位置访问
- asp.net – 如何避免UpdatePanel在AutoPostBack上滚动?
- 部署 – kestrel-hellomvc.service:步骤USER产生失败/usr/
- 我可以在ASP.NET中获取浏览器时区,还是依靠JS操作来检索信息
- 认证 – WebApi ActionFilterAttribute,HttpActi
- asp.net-mvc – 在布局视图中获取当前的Applicat
- asp.net Gridview,1记录跨度两行
- asp.net – 我们可以在单个元素上有多个itemprop
- 在ASP.NET标记中“使用”等效的命名空间
- asp.net – 诊断“请求超时”HttpExceptions
- asp.net – HTML敏捷包删除break标签关闭
- asp.net – 如何扩展aspnet成员身份验证表?
- 有没有办法远程调用ASP.NET开发Web服务器?
- asp.net-mvc – 大型Web应用程序中的Windows Wor
