1

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

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

我已经尝试阅读并围绕ASP.NET MVC:使用 UrlHelper 的单元测试控制器,但这些似乎与测试 url 本身有关。我更关心测试我的功能后面的内容。

上面链接中提到的设置是否太少(或太多)而无法让我的测试正常工作?还是我看错了方向?

4

1 回答 1

0

根据您的评论,它似乎Request是空的。我建议使用谷歌搜索如何模拟请求

我个人喜欢 Ninject/Moq。这是一个非常易于使用、功能强大的组合。您可以执行以下操作:

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

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

于 2013-03-25T18:10:05.507 回答