Unit testing 如何使用新的csproj格式在NUnit测试中创建HttpConfiguration实例?

Unit testing 如何使用新的csproj格式在NUnit测试中创建HttpConfiguration实例?,unit-testing,nunit,xunit,csproj,csproj-user,Unit Testing,Nunit,Xunit,Csproj,Csproj User,我创建了一个单元测试(使用NUnit),它创建了HttpConfiguration的一个实例,并且使用经典的csproj格式工作良好。测试成功。我还创建了一个单元测试(使用xUnit),它使用新的csproj格式执行同样的操作。这个测试也成功了 到目前为止还不错。实际上,我想使用新的csproj格式创建NUnit测试。此测试失败,抛出了一个System.IO.FileLoadException,引用了Newtonsoft.Json,版本=6.0.0 我觉得这很奇怪。在我所有的测试项目中,除了提到

我创建了一个单元测试(使用NUnit),它创建了
HttpConfiguration
的一个实例,并且使用经典的csproj格式工作良好。测试成功。我还创建了一个单元测试(使用xUnit),它使用新的csproj格式执行同样的操作。这个测试也成功了

到目前为止还不错。实际上,我想使用新的csproj格式创建NUnit测试。此测试失败,抛出了一个
System.IO.FileLoadException
,引用了Newtonsoft.Json,版本=6.0.0

我觉得这很奇怪。在我所有的测试项目中,除了提到的单元测试框架之外,我还添加了两个包:Microsoft.AspNet.WebApi.Core 5.2.7Newtonsoft.Json 12.0.3

以下是我测试失败的原因:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net472</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNet.WebApi.Core" Version="5.2.7" />
    <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
    <PackageReference Include="NUnit" Version="3.2.0" />
  </ItemGroup>

</Project>
以下是我的测试结果:

我真的很惊讶。我的测试成功,NUnit使用旧的csproj格式。当使用xUnit和新的csproj格式时,我的测试也成功了。因此,我使用哪种格式或框架并不重要。但是,当我将NUnit与新格式结合使用时,测试失败。这是怎么可能的,我怎样才能做到这一点?Newtonsoft.Json的12.0.3版对于其他两个测试都不是一个障碍,所以对于失败的测试也不应该是

我的代码也可以找到:

您的NUnit“OldStyle”项目正在引用Newtonsoft.Json版本6.0.4。这就是它工作的原因-此版本与Microsoft.AspNet.WebApi.Core一起安装,因此没有冲突。您的“NewStyle”项目引用的是Newtonsoft.Json版本12.0.3,与同一版本的Microsoft.AspNet.WebApi.Core存在冲突

如果您在“OldStyle”项目中将Newtonsoft.Json升级到最新版本,它将在app.config中为您创建绑定重定向:



将此配置复制到您的“NewStyle”项目中,所有内容都将按预期工作。

我刚刚在最近的提交中进行了更新。Newtonsoft 12.03现在被广泛使用。情况依然如此。但是,将app.config复制到NewStyle会使单元测试成功。然而,我不需要它。NewStyle.Xunit项目在没有app.config的情况下成功。如果没有app.config文件,我不能使NewStyle成功吗?麻烦制造者是NUnit,因为如果我选择另一个测试框架,根本就没有问题。看起来xunit以某种方式自动生成了它们。如果不想使用app.config,可以将:
true
添加到.csproj。有了他们,NUnit也可以正常工作。谢谢。这完全解决了我的问题。顺便说一句,将
true
添加到
PropertyGroup
即可完成此任务。请注意,此问题已得到回答,解决方案已通过此提交实现:
[Test]
public void CreateInstance()
{
    var instance = new HttpConfiguration();
}