C# 返回字符串时URL帮助程序方法测试失败
我使用的是C# 返回字符串时URL帮助程序方法测试失败,c#,asp.net-mvc,asp.net-mvc-2,nunit,C#,Asp.net Mvc,Asp.net Mvc 2,Nunit,我使用的是ASP.netmvc3和NUnit 我创建了一个helper方法来返回动作方法(重载方法): 失败的测试是第二个名为CategoryIndex\u的测试,它应该使用\u child\u category\u id()导航到\u category\u index\u action\u method\u 私有HttpContextBase HttpContextBaseSub; 私有请求上下文请求上下文; 私人UrlHelper UrlHelper; [设置] 公共作废设置() { htt
ASP.netmvc3
和NUnit
我创建了一个helper方法来返回动作方法(重载方法):
失败的测试是第二个名为CategoryIndex\u的测试,它应该使用\u child\u category\u id()导航到\u category\u index\u action\u method\u
私有HttpContextBase HttpContextBaseSub;
私有请求上下文请求上下文;
私人UrlHelper UrlHelper;
[设置]
公共作废设置()
{
httpContextBaseStub=MockRepository.GenerateSub();
requestContext=newrequestcontext(httpContextBaseStub,newroutedata());
urlHelper=新的urlHelper(requestContext);
}
[测试]
公共无效类别索引应导航到类别索引方法()
{
//表演
object actual=UrlHelperNavigationExtensions.CategoryIndex(urlHelper);
//断言
RouteValueDictionary routes=新的RouteValueDictionary(实际);
Assert.AreEqual(“类别”,路由[“控制器]);
AreEqual(“索引”,路由[“操作]);
}
[测试]
public void CategoryIndex应导航到具有子类别id()的类别索引方法
{
//安排
int childCategoryId=1;
//表演
string actual=UrlHelperNavigationExtensions.CategoryIndex(urlHelper,childCategoryId);
//断言
Assert.AreEqual(“/Category/Index/1”,实际值);
}
它抱怨实际值为空。为什么会这样?我该如何纠正它?我的猜测是因为路由表是空的,所以它不知道如何生成url
添加普通/{controller}/{action}路由,它应该可以工作
(我在打电话,如果这是错误的,请原谅)
您需要存根一个IRouteHandler实现,我在这里称之为存根处理程序
RouteTable.Routes.Add(new Route
(
"{controller}/{action}/{id}"
, stub_handler
);
在我看来,您没有初始化routecollection。我想这样的事情就行了
[SetUp]
public void SetUp()
{
RouteCollection routes = new RouteCollection();
MvcApplication.RegisterRoutes(routes);
httpContextBaseStub = MockRepository.GenerateStub<HttpContextBase>();
requestContext = new RequestContext(httpContextBaseStub, new RouteData());
//urlHelper = new UrlHelper(requestContext);
urlHelper = new UrlHelper(requestContext, routes);
}
[设置]
公共作废设置()
{
RouteCollection routes=新RouteCollection();
MVCAPApplication.RegisterRoutes(路由);
httpContextBaseStub=MockRepository.GenerateSub();
requestContext=newrequestcontext(httpContextBaseStub,newroutedata());
//urlHelper=新的urlHelper(requestContext);
urlHelper=新的urlHelper(请求上下文、路由);
}
似乎还没有设置HttpContextBase。请确保对其进行适当的模拟,否则您将得到一些空引用异常
[SetUp]
public void SetUp()
{
RouteCollection routes = new RouteCollection();
MvcApplication.RegisterRoutes(routes);
//httpContextBaseStub = (new Moq.Mock<HttpContextBase>()).Object;
var request = new Mock<HttpRequestBase>();
var response = new Mock<HttpResponseBase>();
response.Setup(r => r.ApplyAppPathModifier(It.IsAny<string>())).Returns((String url) => url);
var mockHttpContext = new Mock<HttpContextBase>();
mockHttpContext.Setup(c => c.Request).Returns(request.Object);
mockHttpContext.Setup(c => c.Response).Returns(response.Object);
requestContext = new RequestContext(mockHttpContext.Object, new RouteData());
urlHelper = new UrlHelper(requestContext, routes);
}
[设置]
公共作废设置()
{
RouteCollection routes=新RouteCollection();
MVCAPApplication.RegisterRoutes(路由);
//httpContextBaseStub=(新的Moq.Mock()).Object;
var request=newmock();
var response=newmock();
response.Setup(r=>r.ApplyAppPathModifier(It.IsAny())。返回((字符串url)=>url);
var mockHttpContext=new Mock();
mockHttpContext.Setup(c=>c.Request).Returns(Request.Object);
mockHttpContext.Setup(c=>c.Response).Returns(Response.Object);
requestContext=newRequestContext(mockHttpContext.Object,newRoutedData());
urlHelper=新的urlHelper(请求上下文、路由);
}
您可以发布与此相关的路由规则吗?@Iridio:添加新项目时,我有默认规则。@Brendan,更新后,您必须对IRoutHandler接口执行更多存根操作。
[SetUp]
public void SetUp()
{
RouteCollection routes = new RouteCollection();
MvcApplication.RegisterRoutes(routes);
httpContextBaseStub = MockRepository.GenerateStub<HttpContextBase>();
requestContext = new RequestContext(httpContextBaseStub, new RouteData());
//urlHelper = new UrlHelper(requestContext);
urlHelper = new UrlHelper(requestContext, routes);
}
[SetUp]
public void SetUp()
{
RouteCollection routes = new RouteCollection();
MvcApplication.RegisterRoutes(routes);
//httpContextBaseStub = (new Moq.Mock<HttpContextBase>()).Object;
var request = new Mock<HttpRequestBase>();
var response = new Mock<HttpResponseBase>();
response.Setup(r => r.ApplyAppPathModifier(It.IsAny<string>())).Returns((String url) => url);
var mockHttpContext = new Mock<HttpContextBase>();
mockHttpContext.Setup(c => c.Request).Returns(request.Object);
mockHttpContext.Setup(c => c.Response).Returns(response.Object);
requestContext = new RequestContext(mockHttpContext.Object, new RouteData());
urlHelper = new UrlHelper(requestContext, routes);
}