无法使xUnit测试与.NET Core一起运行

齿

我正在将NuGet上的小型库移植到.NET Core。

我已经为主要项目和测试创建了.NET Standard 1.6类库,并在代码上进行了复制。我将单元测试更改为使用xUnit属性和断言而不是NUnit。

除此之外,我几乎按照文档的说明进行操作,因此添加了以下NuGet软件包:

  • Microsoft.NET.Test.Sdk
  • 单位
  • xunit.runner.visualstudio

las,(1)测试资源管理器找不到我的单元测试,并且(2)运行时dotnet test,我得到以下信息:

开始执行测试,请稍候...找不到源'[...]。Tests.dll'的testhost.dll。确保测试项目具有包“ microsoft.testplatform.testhost”的nuget引用。

我实际上已经添加了建议的Microsoft.TestPlatform.TestHostNuGet程序包,但这并没有改变任何内容。

那么这是什么问题呢?

我正在使用Visual Studio2017。不是我认为这有所作为。

更新:将测试项目从更改Class Library (.NET Standard)Class Library (.NET Core)解决问题。我仍然不明白为什么这应该有所作为。

肖恩·卢汀(Shaun Luttin)

将测试项目从类库(.NET Standard)更改为类库(.NET Core),可以解决此问题。我仍然不明白为什么这应该有所作为。

单元测试是我们运行的应用程序。要构建这样的应用程序,我们必须指定运行时和应用程序模型。当我们以.NET Standard为目标时,运行时和应用程序模型是模棱两可的。MSBuild不知道是否要针对.NET Framework,.NET Core,Mono / Xamarin或其他兼容.NET Standard的平台进行构建。定向.NET Core可为MSBuild提供所需的输入,MSBuild现在知道如何解析所有引用的程序集/项目并选择适当的框架版本。

但是事实并非如此。过去,您总是将类库用于单元测试;它从未被视为可以运行的应用程序,而是可以输入到测试运行程序中的类和方法的集合。

过去,我们没有.NET标准,这是一个模棱两可的目标。当MSBuild看到.NET Standard时,它需要更多信息。“好吧,您想使用哪个.NET Standard兼容运行时生成可运行输出?” 例如netstandard1.2如果我们确定了目标,则MSBuild将不知道是否要针对.NET Core 1.0,.NET Framework 4.5.1,Windows 8.1或其他几个netstandard1.2兼容平台进行构建。

在此处输入图片说明

开始执行测试,请稍候...找不到源'[...]。Tests.dll'的testhost.dll。确保测试项目具有包“ microsoft.testplatform.testhost”的nuget引用。

如果未指定netcoreapp,则MSBuild将假定我们使用的是完整框架。在这种情况下,它期望目标程序集(包括)testhost.dll在中bin如果不是(如果我们不是根据.NET Standard构建的,则不是),那么我们将收到上述错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章