2017-10-24 6 views
1

アプリケーション起動時にアプリケーションキャッシュ(キャッシュマネージャ)を持つ私のAngularJS Web API呼び出し用のテストメソッドを記述する必要があります。テストメソッドを実行しようとするとコントローラが呼び出され、コードがBusinessクラスに達したときにCacheManagerがキャッシュを持つことを期待しています。なぜなら、m = NULL例外をスローします。助けてください。C#でWeb API呼び出しを検証するためのTestMethod

答えて

0

APIコントローラを呼び出す前に、config.Routes.MapHttpRouteを設定し、HTTPCONTEXTを次のように初期化する必要があります。

var Route = config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
      ); 
      HttpContext.Current = new HttpContext(
      new HttpRequest("", "http://localhost", ""), 
      new HttpResponse(new StringWriter()) 
      ); 
      var RouteData = new HttpRouteData(Route, new HttpRouteValueDictionary { { "controller", "unittest" } }); 
      var Request = new HttpRequestMessage(HttpMethod.Get, "http://localhost"); 
      controller.ControllerContext = new System.Web.Http.Controllers.HttpControllerContext(config, RouteData, Request); 
      controller.Request = Request; 
      controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config; 
0

単体テストでは、テストされたロジックを別々にテストする必要がある依存関係から分離することをお勧めします。これを達成する最も簡単な方法は嘲笑です。モックされたキャッシュ・マネージャーを使用してアプリケーションに注入して、テスト中に行われるすべての呼び出しを処理し、事前定義された値を戻すことができます。模倣されたインターフェースがどのように振る舞うかを制御することはきわめてきめ細かです。私の経験から、Moq mockingパッケージをお勧めします。

関連する問題