2014-03-04 133 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的文件夹中创建的包控件中删除所有旧版本。