2013-06-19 6 views
6

私はコントローラ用のユニットテストを書いています。私たちは以下の簡単なコントローラを持っています。剣道UIを使用したMVC4でのユニットテストコントローラアクション

public class ClientController : Controller 
{ 

    [HttpPost] 
    public ActionResult Create(Client client, [DataSourceRequest] DataSourceRequest request) 
    { 
     if (ModelState.IsValid) 
     { 
      clientRepo.InsertClient(client); 
     } 

     return Json(new[] {client}.ToDataSourceResult(request, ModelState)); 
    } 
} 

このためのユニットテストは、以下の通りである:

[Test] 
public void Create() 
{ 
     // Arrange 
     clientController.ModelState.Clear(); 

     // Act 
     JsonResult json = clientController.Create(this.clientDto, this.dataSourceRequest) as JsonResult; 

     // Assert 
     Assert.IsNotNull(json); 

} 

コントローラコンテキストは、次のコードで偽装されている:ときCreateコントローラのアクションの試行例外が発生

public class FakeControllerContext : ControllerContext 
    { 
     HttpContextBase context = new FakeHttpContext(); 

     public override HttpContextBase HttpContext 
     { 
      get 
      { 
       return context; 
      } 
      set 
      { 
       context = value; 
      } 
     } 

    } 

    public class FakeHttpContext : HttpContextBase 
    { 
     public HttpRequestBase request = new FakeHttpRequest(); 
     public HttpResponseBase response = new FakeHttpResponse(); 

     public override HttpRequestBase Request 
     { 
      get { return request; } 
     } 

     public override HttpResponseBase Response 
     { 
      get { return response; } 
     } 
    } 

    public class FakeHttpRequest : HttpRequestBase 
    { 

    } 

    public class FakeHttpResponse : HttpResponseBase 
    { 

    } 


} 

ToDataSourceResultメソッドに電話をかけてください。

System.EntryPointNotFoundException : Entry point was not found. 

デバッグ(標準コンテキストで実行されていない場合)にModelState内部辞書ユニットテストに空であることを示しています。 ModelStateToDataSourceResultメソッドから削除された場合、テストは成功します。どんな助けも大歓迎です。

答えて

5

JustDecompileで迅速なピークがKendo.Web.Mvc.dllSystem.Web.Mvcバージョン3.0に対して構築されたことが明らかになりました。あなたのテストプロジェクトはおそらく、新しいバージョンのASP.NET MVC(4.0)を参照しているため、実行時にメンバに呼び出されたメンバーは解決できないため、System.EntryPointNotFoundExceptionになります。あなたの特別なケースでは、KendoUI MVC拡張メソッドToDataSourceResult()とそれに続くModelState.IsValidへの呼び出しが原因でした。

Visual Studio ASP.NET MVCプロジェクトテンプレートの一部としてデフォルトでプロジェクトがredirect assembly bindingsに設定されているため、ランタイムがASPの最新バージョンを対象としているためです。 NET MVCを組み立てました。テストプロジェクトを修正するには、App.configファイルに同じランタイムバインディング情報を追加します。

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
       <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

このような場合に役立ちます。

+0

多くのおかげさまで...決してこの結論には到着しませんでした。 – aponzani

+0

この回答は私の一日を救った! – vcRobe

関連する問題