问题 错误单元测试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 = 30ad4fe6b2a6aeed'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)

资源: System.Net.Http.Formatting

堆栈跟踪:at 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()      在c:\ PremiumProjectsCollection \ emr \ src \ EMRAzure \ EMRAzure \ EMR.Test \ Controller \ AccountControllerTest.cs中的EMR.Test.Controller.AccountControllerTest.Should_Get():第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


11721
2018-03-04 06:35


起源

我面临同样的问题。你有没有解决它? - Jean-François Beauchamp
@ Jean-FrançoisBeauchamp,我最终回到了Newtonsoft.Json 4.5.0.0 - reggieboyYEAH
我有同样的问题。你有没有解决这个问题? - Chuck Conway
@ChuckConway没有我最终回滚到Newtonsoft.Json 4.5.0.0 - reggieboyYEAH


答案:


你需要添加一个 程序集重定向

<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。)


5
2018-03-04 06:50



谢谢标记,但我已经在我的app.config中有这个。它仍然有例外。 - reggieboyYEAH
哪个app.config文件? - Mark Seemann
是的,我在我的app.config中有它。在单元测试项目中 - reggieboyYEAH
哪个单元测试框架?哪个测试跑步者? - Mark Seemann
我正在使用mstest + vs2012 - reggieboyYEAH


(注意下面的注释是指具有此问题的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

这解决了我。


3
2018-01-28 11:26





我自己没试过,但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-used- vs2012rc?论坛= vsunittest


1
2018-05-07 03:52





我几天前遇到了同样的问题,我花了几个小时才找到解决方案。

我正在测试一个安装了最新版NewtonSoft的单元,而我的测试项目有一个旧版本。

我通过右键单击解决方案资源管理器中的解决方案,通过“管理Nuget软件包解决方案”选项在我的解决方案中整合了此库的版本。

这将更新当前解决方案下项目中存在的所有NewtonSoft库,并从VisualStudio在解决方案目录中名为packages的文件夹中创建的包控件中删除所有旧版本。


0
2018-01-25 23:18