asp.net-mvc – asp.net mvc如何正确测试控制器
发布时间:2021-01-24 05:14:52 所属栏目: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 Web API
- ASP.NET通过分布式Session提升性能
- 如何在ASP.NET MVC应用程序中本地化Controller名称和操作?
- ASP.NET汉字转拼音 - 输入汉字获取其拼音的具体实现
- asp.net-mvc-4 – ASP.NET MVC 4通过ActionLink传递对象变量
- 详解ASP.NET Core 中的框架级依赖注入
- asp.net-mvc – ASP.NET MVC获取具有特定配置文件属性的用户
- Asp.NET控制文件上传的大小方法(超简单)
- asp.net-mvc – 从Api控制器内生成绝对的url to action
- asp.net – Request.Url.AbsoluteUri和重写的URL
推荐文章
站长推荐
- asp.net – 是否可以在源代码中使用iframe和loca
- asp.net – 我想列出我的下拉列表中的所有国家/地
- asp.net – 脚本标签和链接标签进入asp:内容或外
- asp.net – 使用app_offline.htm使应用程序脱机,
- 什么是链接服务器的ASP.NET连接字符串格式?
- asp.net-mvc – 有没有办法重命名RequestVerific
- asp.net-mvc-3 – 如何在本地测试时禁用elmah发送
- ASP.NET Core中调整HTTP请求大小的几种方法详解
- asp.net-mvc-3 – Url.Action没有给出预期的结果
- asp.net-mvc – 从页面到局部视图的asp.net mvc参
热点阅读
