Web API RouteUrl在测试中返回null异常

时间:2013-03-25 15:12:11

标签: c# unit-testing asp.net-web-api

我是一个新的单元测试,我试图在Visual Studio 2012中使用Moq和MSTest来为我的一个应用程序创建一个方法的测试。该应用程序可以正常工作,但是当我运行我的测试时,我得到以下的空引用异常:

var fooURL = Url.RouteUrl("MyApi", new { httproute = string.Empty, controller = "MyController", id = id }, Request.Url.Scheme);

我试过在ASP.NET MVC: Unit testing controllers that use UrlHelper周围阅读和包裹我的头,但这些似乎与测试网址本身有关。我更关心的是测试我函数后面的内容。

上面链接中提到的设置是否太少(或太多)以使我的测试工作?或者我是朝错误的方向看的?

1 个答案:

答案 0 :(得分:0)

根据您的评论,似乎Request为空。我建议使用Google搜索how to mock out the request

我个人喜欢Ninject / Moq。这是一个非常易于使用,功能强大的组合。你可以这样做:

  • 使用您需要模拟的任何内容创建IHttpRequest接口(在本例中,只是Url属性)
  • 使用Ninject将您的制作应用(在global.asax的app-start事件中)绑定到真实请求(Kernal.Bind<IHttpRequest>().To(HttpRequest)
  • 在您的测试用例中,有一个基本测试类或全局测试运行类,而不是绑定到您的模拟类(或new Mock<IHttpRequest>()实例)

您可能必须使您的界面从真实HttpRequest类复制必要的方法/签名。如果这不起作用,您将需要创建一个实现接口的包装类,并将调用委托给真实的HttpRequest实例。