我有一个webapi控制器,我正在尝试进行单元测试。但是我正在努力解决不同类型的ControllerContext。我看到的大多数代码示例都与测试MVC控制器而不是Web API控制器有关。
控制器定义为:
public class OrdersController : ApiController
{
我有这个代码,当我运行应用程序
时uri = Url.Route("DefaultRoute", new { httproute = true, Id = order.Id});
但是,当我尝试将其作为单元测试运行时,它会失败。我已经调试它并且在运行单元测试时发现Url为null,而如果我正常运行系统,则Url是System.Web.Http.Routing.UrlHelper类型的对象。
知道如何在运行单元测试时让Url.Route()工作吗?
答案 0 :(得分:1)
对于 Web API 2 中的单元测试,更简单的选择是为您的控制器实例提供UrlHelper的Mock版本。此示例使用Moq
var mockUrlHelper = new Mock<UrlHelper>();
ordersCtrl.Url = mockUrlHelper.Object;
如果您使用的是更高版本的web api,则必须使用RouteData在测试中填充控制器。此示例取自asp.net website:
controller.Configuration = new HttpConfiguration();
controller.Configuration.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
controller.RequestContext.RouteData = new HttpRouteData(
route: new HttpRoute(),
values: new HttpRouteValueDictionary { { "controller", "products" } });