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,以准备被测试对象的模拟上下文,并避免在每个单元测试中重复它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 容器HEALTHCHECK指令对接ASP.NET Core健康检查能力
- Buddy Class中的必需属性不适用于Entity Framework 5和ASP.
- asp.net – 在负载均衡器上启用粘性会话
- asp.net-mvc – 条件数据注释
- asp.net-mvc – DefaultModelBinder不绑定嵌套模型
- asp.net – 什么可能导致一个服务器上的此错误,但不是另一个
- asp.net – 无法在混合VS环境中正确处理路由
- asp.net-mvc – MVC角色授权
- asp.net – RedirectToAction替代方案
- asp.net-mvc-4 – ASP.NET MVC 4应用程序捆绑和分类,为什么
- asp.net-mvc-3 – Url.Action没有给出预期的结果
- asp.net-core – 是否可以/建议使用EFCore 2.1数
- [.Net码农]ASP.NET MVC 之 View 测试
- asp.net – 在生产服务器上运行EF迁移的最佳方法
- asp.net-mvc – 如何创建ASP.NET MVC控制器从查询
- adfs2.0 – 启用了非声明的ASP.NET应用程序和ADF
- asp.net – 如何解决“Chunked body没有正确终止
- asp.net-mvc-4 – 如何配置使用Authorize(Roles)
- 如何打开一个页面在新的选项卡按钮点击asp.net?
- Asp.net从Https重定向到Http