我使用的是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=30Ad4fe6b2a6eed"或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT异常:0x80131040)
源:System.Net.Http.格式化
Stacktrace:位于System.Net.Http.Formating.JsonMediaTypeFormatter.ctor()位于System.Net.Http.Formating.MediaTypeFormatterCollection.CreateDefaultFormatters()位于System.Net.Http.Formating.MediaTypeFormatterCollection.ctor()位于System.Web.Http.HttpConfiguration.DefaultFormatters()位于System.Web.Http.HttpConfiguration.ctor(HttpRouteCollection路由)位于System.Web.Http.HttpConfiguration.ctor()位于c:\PremiumProjectsCollection\EMR\src\EMRAure\EMRARE\EMR.Test\Controller\AccountControllerTest.FShould_Get()中。cs:line 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控制台在我的Web Api客户端库和测试项目上安装了最新版本的Newtonsoft.Json。
安装软件包Newtonsoft.Json-版本6.0.8(注意,你可能需要找出哪一个是最新版本)
问题仍然存在,所以我意识到System.Net.Http.Formating和我的最新版本Json之间出现了崩溃。要解决此问题,请删除System.Net.Http和System.Net.HHttp.Formating引用,并通过Nuget安装WebApi客户端库,如下所示:
安装包Microsoft.AspNet.WebApi.Client
这为我解决了问题。
我自己没有尝试过,但2012 mstest中似乎有一个bug。您必须使用.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-used-vs2012rc?forum=vsunittest
几天前我遇到了同样的问题,花了几个小时才找到解决方案。
我正在测试一个安装了最新版本NewtonSoft的单元,而我的测试项目有一个旧版本。
为了解决这个问题,我在解决方案资源管理器中右键单击解决方案,通过"管理Nuget软件包以获得解决方案"选项将该库的版本整合到我的解决方案中。
这将更新当前解决方案下项目中的所有NewtonSoft库,并从VisualStudio在解决方案目录中名为packages的文件夹中创建的包控件中删除所有旧版本。