簡體   English   中英

錯誤單元測試webapi控制器

[英]Error unit testing webapi controller

我正在使用AspNet Web Api Client 5.0,我正在嘗試對web api控制器進行單元測試。

var encservice = new EncryptionService();
var acctservice = FakeServices.GetAccountService();
var controller = new AccountController(acctservice, encservice);
controller.Request = new HttpRequestMessage();

當代碼

controller.Request.SetConfiguration(new HttpConfiguration());

被執行我遇到了異常

消息 :無法加載文件或程序集“Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed”或其中一個依賴項。 定位的程序集的清單定義與程序集引用不匹配。 (HRESULT異常:0x80131040)

資料來源: System.Net.Http.Formatting

Stacktrace :位於System.Net的System.Net.Http.Forttting.Medic中的System.Net.Http.Forttting.Medie中的System.Net.Http.Formatting.MediaTypeFormatterCollection.CreateDefaultFormatters()處的System.Net.Http.Formatting.JsonMediaTypeFormatter..ctor() .HttpConfiguration.DefaultFormatters()位於System.Web.Http.HttpConfiguration..ctor(HttpRouteCollection路由)的System.Web.Http.HttpConfiguration..ctor()位於EMR.Test.Controller.AccountControllerTest.Should_Get()的c中:\\ PremiumProjectsCollection \\ emr \\ src \\ EMRAzure \\ EMRAzure \\ EMR.Test \\ Controller \\ AccountControllerTest.cs:第34行

我使用的newsoft.json的版本是6.0

我的配置文件中也有一個程序集重定向

 <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
  </dependentAssembly>

我使用的測試運行器是MStest,VS2012

您需要添加程序集重定向

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json"
                          publicKeyToken="30ad4fe6b2a6aeed"
                          culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

(假設Newtonsoft.Json的程序集版本正好是6.0.0.0 。)

(注意以下注釋是指具有此問題的Web Api客戶端項目)

我對Newtonsoft.Json的版本有同樣的問題,所以我刪除了舊版本的引用,並使用Package Manager Console在我的Web Api Client Library和Test Project上安裝了最新版本的Newtonsoft.Json。

安裝包Newtonsoft.Json -Version 6.0.8(注意你可能需要找出哪個是最新版本)

問題仍然存在,所以我意識到System.Net.Http.Formatting和我最新版本的Json之間出現了崩潰。 要解決此問題,請刪除System.Net.Http和System.Net.Http.Formatting引用,並通過Nuget安裝WebApi客戶端庫,如下所示:

安裝包Microsoft.AspNet.WebApi.Client

這解決了我。

我自己沒試過,但是2012年的mstest似乎有一個錯誤。 你必須使用.testsettings文件來獲取app.config。

請參閱以下鏈接: http//social.msdn.microsoft.com/Forums/vstudio/en-US/234926d1-42c0-4ebb-af39-1626e72f6c39/why-does-assemblybinding-work-only-if-testsettings-file -is-二手vs2012rc?論壇= vsunittest

我幾天前遇到了同樣的問題,我花了幾個小時才找到這個問題的解決方案。

我正在測試一個安裝了最新版NewtonSoft的單元,而我的測試項目有一個舊版本。

我通過右鍵單擊解決方案資源管理器中的解決方案,通過“管理Nuget軟件包解決方案”選項,在我的解決方案中整合了此庫的版本。

這將更新當前解決方案下項目中存在的所有NewtonSoft庫,並從VisualStudio在解決方案目錄中名為packages的文件夾中創建的包控件中刪除所有舊版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM