asp.net-mvc – asp.net mvc如何正确测试控制器
发布时间:2021-01-24 11:27:39 所属栏目:asp.Net 来源:互联网
导读:我在测试控制器时遇到了困难.原来我的测试控制器看起来像这样: SomethingController CreateSomethingController(){ var somethingData = FakeSomethingData.CreateFakeData(); var fakeRepository = FakeRepository.Create(); var
我在测试控制器时遇到了困难.原来我的测试控制器看起来像这样: SomethingController CreateSomethingController() { var somethingData = FakeSomethingData.CreateFakeData(); var fakeRepository = FakeRepository.Create(); var controller = new SomethingController(fakeRepository); return controller; } 这适用于大多数测试,直到我得到Request.IsAjaxRequest()部分代码.所以我不得不模拟HttpContext和HttpRequestBase.所以我的代码然后改为看起来像: public class FakeHttpContext : HttpContextBase { bool _isAjaxRequest; public FakeHttpContext( bool isAjaxRequest = false ) { _isAjaxRequest = isAjaxRequest; } public override HttpRequestBase Request { get { string ajaxRequestHeader = ""; if ( _isAjaxRequest ) ajaxRequestHeader = "XMLHttpRequest"; var request = new Mock<HttpRequestBase>(); request.SetupGet( x => x.Headers ).Returns( new WebHeaderCollection { {"X-Requested-With",ajaxRequestHeader} } ); request.SetupGet( x => x["X-Requested-With"] ).Returns( ajaxRequestHeader ); return request.Object; } } private IPrincipal _user; public override IPrincipal User { get { if ( _user == null ) { _user = new FakePrincipal(); } return _user; } set { _user = value; } } } SomethingController CreateSomethingController() { var somethingData = FakeSomethingData.CreateFakeData(); var fakeRepository = FakeRepository.Create(); var controller = new SomethingController(fakeRepository); ControllerContext controllerContext = new ControllerContext( new FakeHttpContext( isAjaxRequest ),new RouteData(),controller ); controller.ControllerContext = controllerContext; return controller; } 现在它已进入我的控制器中的那个阶段,我称之为Url.Route和Url为null.所以看起来我需要开始为我的控制器模拟路线. 我似乎花了更多的时间在Google上搜索伪造/模拟对象,然后调试以确保我的假货是正确的,而不是实际编写测试代码.有没有更简单的方法来测试控制器?我看过MvcContrib的TestControllerBuilder,它可以解决一些问题,但似乎并没有做任何事情.有没有其他可用的工作,让我专注于编写测试而不是编写模拟? 谢谢 解决方法您可以使用一些开箱即用的库,其中包含一些这些对象.例如 RhinoMock,NMock …等我个人使用 Moq – 它足够好且免费.在Moq中我最喜欢的是linq表达式.(编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – ASP.Net MVC中的自我AJAX更新部分视图/控制
- 如何在Asp.Net Mvc中进行Basecamp风格的账户?
- asp.net中使用repeater和PageDataSource搭配实现分页代码
- asp.net-mvc – 无法更改关系,因为一个或多个外键属性在MVC
- 如何通过Asp.net WebAPI中的异常过滤器传递内容?
- asp.net-web-api – 使用swashbuckle api文档的http basic
- asp.net – MS Chart for .NET预定义调色板颜色列表?
- 单元测试 – 单元测试项目不能参考MVC项目
- asp.net-mvc – 使用IIS基本身份验证的OWIN身份验证
- asp.net-mvc – 在一个页面中以两种不同的形式使用多个@ Ht
推荐文章
站长推荐
- 对asp.net网站进行基准测试,我可以使用jmeter吗?
- ASP.NET MVC AJAX文档在哪里?
- 集成ASP.NET Webforms,WebAPI和AngularJS
- asp.net-mvc – 缩小ASP.NET MVC中的Action Filt
- asp.net core webapi 服务端配置跨域的实例
- asp.net-mvc – 保存后显示相同的页面
- ASP.NET MVC4 Razor模板简易分页效果
- asp.net-mvc-3 – Azure网站上的RavenDb – 访问
- asp.net-mvc – 如何使用selenium进行ASP.NET MV
- ASP.NET 程序中删除文件夹导致session失效问题的
热点阅读