首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确实现.net标准库的单元测试

如何正确实现.net标准库的单元测试
EN

Stack Overflow用户
提问于 2019-10-07 16:25:52
回答 3查看 6.5K关注 0票数 9

因此,就我从我的研究中得到的理解而言。.net标准库不能单独使用,因此需要通过不同的框架进行测试,无论是使用.net框架还是使用.net核心参考文献。我就是这么解释的。现在我正在尝试创建一个标准库,因为我需要它在大多数设备上尽可能兼容,问题是我不知道如何正确地创建单元测试。每次创建MSTest项目时,我都会得到以下错误:

测试运行将使用为框架.NETCoreApp、Version=v1.0和platform X64构建的DLL。下面的DLL与框架/平台设置不匹配。Otchi.Ebml.Tests.dll是为Framework2.1和Platform AnyCPU构建的。

我对不同的架构和其他设置做了大量的实验,但是似乎没有什么能消除这种警告。我是做错了什么,还是有一种不同的、更适合为标准库创建单元测试的方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-07 16:51:28

.NET标准库不包含执行所需的组件。它只定义了执行模式。当部署到特定的计算机/处理器体系结构时,代码必须知道要在哪个指令集上执行。

这就是.NET框架和.NET核心发挥作用的地方。.NET框架包含Microsoft操作系统支持的指令集的执行详细信息。类似地,.NET核心包含用于本机不支持的其他体系结构的指令集。

要编写单元测试,您需要在.NET或.NET内核中创建一个新项目来执行代码。如果您想涵盖所有的基础,或者如果您有一些针对不同体系结构不同编译的二进制文件(考虑到第三方库),那么您可能希望对多个发行版进行单元测试。

你的图书馆应该是一个独立的图书馆。在更新库以验证输入到库中的代码是否通过之前,应该执行单元测试。这样,任何在那之后使用这个库的人都会对它的工作充满信心。

票数 8
EN

Stack Overflow用户

发布于 2019-10-09 13:19:06

编写针对.NETStandard的库单元测试是很棘手的,因为您必须根据您选择的.NETStandard版本的各种实现来测试您的代码。正如扎克·迪亚兹已经概述的那样,这是因为.NETStandard仅仅定义了在实际平台中实现的类型。

最常见的问题是不同平台(如.NETFramework、.NETCore、Mono等)在实现方面的差异。然而,不同版本的平台之间的实现也存在差异,它们可能会影响库在上述平台上的工作方式(参见这个例子)。

这就是为什么在实现所选版本的.NETStandard的平台的最低版本上运行您的测试并没有完全减少它的原因。您必须考虑库可以一起使用的所有运行时。

一般来说,您有两个选项来解决这个问题。

选项1

使用多靶点为所有有效运行时构建单元测试项目。这也意味着您必须为您的单元测试项目拥有一组非常大的目标框架,在发布平台的新版本时必须对其进行扩展。

如果您想要涵盖所有相关的场景,那么您将拥有数十个目标框架和正在构建的单元测试项目的相同多个版本。让我们假设这会很快失控。

选项2

使用一个能够通过设计实际处理.NETStandard的单元测试平台。构建.NETStandard的单元测试并让这些测试在匹配的运行时上执行将降低测试项目的复杂性。

到目前为止,大多数单元测试平台都无法做到这一点,您只能使用选项1。适合这种方法并真正解决您的问题的是Nuclear.Test

请注意,Nuclear.Test需要.NETStandard 2.0,并且在其当前版本中只处理.NETFramework和.NETCore。不过,这可能会发生变化,我正在努力将所需的.NETStandard版本减少到1.0,并包括Mono和UWP的测试人员。

票数 0
EN

Stack Overflow用户

发布于 2022-08-31 19:27:13

有一个简单的旁路,

用3个项目创建解决方案:

  1. "Demo.NetStandard"

您的.Net标准库项目

  1. "Demo.NetFramework.LinkedToStandard"

新的.Net框架库项目,并复制和粘贴为链接所有.Net标准文件

  1. "Demo.Tests"

新的.Net框架测试项目,并添加引用> "Demo.NetFramework.LinkedToStandard“

这样,您就可以将代码直接写入.NetStandard文件,并将其作为.NetFramework代码进行测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58273565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档