路由数据的单元测试不适用于 ASP.NET MVC 5 Web API [英] Unit Test with route data not working on ASP.NET MVC 5 Web API
问题描述
我已使用 MVC 5 将我的 web api 项目升级到最新版本应用程序运行正常,但这行代码在我的单元测试中不再工作:
I have upgraded my web api project to the latest version, using MVC 5 The application runs properly but this line of code is not working anymore on my unit tests:
string uri = this.Url.Link("DefaultApi", new { id = savedOrganization.Id });
控制器的 Url 属性现在为空.这是我配置模拟控制器的方式:
The Url property of the controller is now null. This is how I configure the mock controller:
var config = new HttpConfiguration();
var request = new HttpRequestMessage(HttpMethod.Post, "http://xxx/api/organization");
var route = config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}");
var routeData = new HttpRouteData(route, new HttpRouteValueDictionary {{"controller", "organization"}});
controller.ControllerContext = new HttpControllerContext(config, routeData, request);
controller.Request = request;
controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config;
controller.Request.Properties[HttpPropertyKeys.HttpRouteDataKey] = routeData;
在升级到 MVC 5 之前,它运行良好.
Before upgrading to MVC 5 it was working fine.
当我调试测试时,它显示 Url 属性现在为空
When I debug the test it shows that the Url property is now null
推荐答案
看起来在 MVC 5 中 Url 属性是以不同的方式创建的.我在测试中引入了这一行,现在 Url 属性恢复正常
It looks like in MVC 5 the Url property is created in a different way. I have introduced this line in my tests and now the Url property is back to normal
private static void SetupControllerForTests(ApiController controller)
{
var config = new HttpConfiguration();
var request = new HttpRequestMessage(HttpMethod.Post, "http://api.clientele-itsm.com/api/organization");
var route = config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}");
var routeData = new HttpRouteData(route, new HttpRouteValueDictionary
{
{"id", Guid.Empty},
{"controller", "organization"}
});
controller.ControllerContext = new HttpControllerContext(config, routeData, request);
UrlHelper urlHelper = new UrlHelper(request);
controller.Request = request;
controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config;
controller.Request.Properties[HttpPropertyKeys.HttpRouteDataKey] = routeData;
/// inject a fake helper
controller.Url = urlHelper;
}
这篇关于路由数据的单元测试不适用于 ASP.NET MVC 5 Web API的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!