2013-10-29 38 views
11

MVC 5を使用してWeb APIプロジェクトを最新バージョンにアップグレードしました アプリケーションは正常に動作しますが、このコードは私のユニットでは動作していませんテスト:ルートデータを使用したユニットテストがASP.NET MVC 5 Web APIで動作しない

string uri = this.Url.Link("DefaultApi", new { id = savedOrganization.Id }); 

コントローラのUrlプロパティがnullになりました。それがうまく働いていたMVC 5にアップグレードする前に

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; 

: は、これは私がモックコントローラを設定する方法です。私はテストをデバッグするとき

はそれがUrlプロパティは、現在MVC 5にUrlプロパティは、別の方法で作成されたように見えます enter image description here

答えて

13

ヌルであることを示しています。 テストでこの行を導入しましたが、今度はUrlプロパティが正常に戻ります

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; 
} 
関連する問題