单元测试webapi控制器时出错



我使用的是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的文件夹中创建的包控件中删除所有旧版本。

相关内容

  • 没有找到相关文章

最新更新