2014-03-04 165 views
10

我正在使用AspNet Web Api客戶端5.0,我試圖單元測試一個web api控制器。錯誤單元測試webapi控制器

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,版本= 4.5.0.0,文化=中立,PublicKeyToken = 30ad4fe6b2a6aeed'或其依賴項之一。定位的程序集清單定義與程序集引用不匹配。 (從HRESULT異常:0x80131040)

來源: System.Net.Http.Formatting

堆棧跟蹤:在System.Net.Http.Formatting.JsonMediaTypeFormatter..ctor() 在System.Net .Http.Formatting.MediaTypeFormatterCollection.CreateDefaultFormatters() 在System.Net.Http.Formatting.MediaTypeFormatterCollection..ctor() 在System.Web.Http.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 \控制器\ AccountControllerTest.cs:線34

力新的版本。 JSON,我現在用的就是6.0

我也有一個程序集重定向在我confguration文件

<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

+0

我面臨同樣的問題。你有沒有解決它? –

+0

@ Jean-FrançoisBeauchamp,我最終回滾到Newtonsoft.Json 4.5.0.0 – reggieboyYEAH

+0

我遇到同樣的問題。你有沒有解決這個問題? –

回答

5

你需要添加一個assembly redirect

<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

+0

感謝馬克,但我已經在我的app.config中有這個。它仍然遇到異常。 – reggieboyYEAH

+1

哪個app.config文件? –

+0

是的,我在我的app.config。在單元測試項目 – reggieboyYEAH

3

(注意下面的評論指的是有這個問題一個Web API客戶端項目),我Newtonsoft.Json的版本有同樣的問題

所以我刪除了舊版本引用,並使用軟件包管理器控制檯在我的Web Api客戶端庫和測試項目上安裝最新版本的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

這解決了它對我來說。

0

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

我正在測試一臺裝有NewtonSoft最新版本的設備,而我的測試項目有一箇舊版本。

我做了什麼來解決這個問題是通過右鍵單擊解決方案資源管理器中的解決方案,通過「管理解決方案的Nuget包」選項,在我的解決方案中整合此庫的版本。

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