如何使用多个目标框架测试 .NET 库
Posted
技术标签:
【中文标题】如何使用多个目标框架测试 .NET 库【英文标题】:How to test a .NET library with multiple target frameworks 【发布时间】:2021-05-19 08:40:06 【问题描述】:考虑有一个针对以下框架的类库:
net45 .NET 标准 2.0 .NET 标准 2.1这是我的配置:
<TargetFrameworks>net45;netstandard2.0;netstandard2.1</TargetFrameworks>
假设这个库是一个公共 NuGet 包,我不知道消费者会使用哪些运行时版本。
作为供应商,我如何使用这 3 个目标框架测试我的库?我知道为了测试我必须在我的测试项目中选择运行时。那部分很清楚也很容易。例如,对于我的库,我可以为框架 net45 选择运行时 net45。
那么测试 netstandard2.0 或 netstandard2.1 呢?我如何在技术上实现对 netstandard2.1 的测试?例如运行时 netcoreapp3.1 支持 netstandard2.0 和 netstandard2.1 - 但是会选择哪一个,因为两者都兼容? p>
也许说测试针对这三个目标框架是错误的术语?也许它是为了测试 特定的运行时。我不知道并尝试为我回答。
【问题讨论】:
这个答案有帮助吗:***.com/a/44478400/982149 ? 请注意,建议有点离题,所以我编辑了您的问题以专注于“如何”。没有人会用他们不推荐的方法来回答:)。 【参考方案1】:您在所有可用的运行时测试您的代码是正确的,您的代码可能会运行。 NETFramework 和 NETCore 之间确实存在实现差异,即使是从一个 NETCore 版本到另一个,所以绝对不会浪费时间。 您可以将multi targetting 与任何大型单元测试平台(xUnit.net、NUnit、MSTest)一起使用。
同样,您也可以使用 Nuclear.Test 测试您的代码,它会为您找出所有相关的运行时并调用您的测试。 您需要做的就是将您的测试程序集指向与您的库相同的目标框架。 测试 API 与您习惯的略有不同,但我相信这些好处是值得的。 关于所有功能,有一个有用的manual 和一个解释性的blog post。 代码文档将在不久的将来推出,但这些链接应该可以让您轻松入门。
当前程序集解析机制存在缺陷,当目标 NuGet 包不完全遵循 NuGet 包的版本控制方案时。 幸运的是,这种情况不会经常发生,并且会在下一个版本中修复。
【讨论】:
【参考方案2】:我宁愿说测试 特定的运行时。例如,您可以使用 .NET Core 3.1 运行时测试 .NET Standard 2.0。
但在我看来,测试所有声称与 .NET Standard 2.0 兼容的不同运行时并不是您的任务。遵守规范(例如 .NET Standard 2.0)是运行时的工作/责任。
您必须确保您生成的代码与规范兼容。为此,编译器和.NET Portability Analyzer 等工具都会有所帮助。
从测试的角度来看,您可以使用具有多个运行时的测试项目。
【讨论】:
以上是关于如何使用多个目标框架测试 .NET 库的主要内容,如果未能解决你的问题,请参考以下文章