是否有一个很好的单元测试完整性度量

本文关键字:完整性 度量 单元测试 有一个 很好 是否 | 更新日期: 2023-09-27 17:57:02

我有一个类需要单元测试。

对于背景,我正在使用 c# 并使用 NUnit,但我的问题更具理论性:

我不知道我是否编写了足够的测试方法,以及我是否检查了所有场景。是否有已知的工作方法/最佳做法/规则集合?

类似的东西

  • "检查你班上的每一种方法...呸"
  • "检查数据库的所有插入...呸"

(这是一个可能的规则的愚蠢例子,但如果我脑子里有什么不傻的东西,我不会问这个问题)

是否有一个很好的单元测试完整性度量

单元测试有几个可用的指标。查看代码覆盖率和正交测试。

然而,我要说,这不是解决问题的最佳办法。虽然 100% 的代码覆盖率是一个令人钦佩的目标,但它可能会成为一种掩盖测试实际质量的指标。

就我个人而言,我认为通过调查测试驱动开发会获得更好的结果 - 使用这种方法,您知道您具有良好的覆盖率(在代码行和类功能方面),因为您在编写类方法本身之前一直在编写测试来练习您的类。

您可能需要查看测试覆盖率。NCover 是 NUnit 开发人员的代码覆盖解决方案。

你可以查看支持 Nunit 的 NCover 或 Visual Studio 代码覆盖率工具

在代码中测量测试覆盖率的度量单位称为"代码覆盖率"。

根据维基百科:

代码覆盖率是用于 软件测试。它描述了 其源代码的程度 程序已经过测试。它是一种形式 检查代码的测试 直接,因此是 白盒测试。及时,使用 的代码覆盖率已扩展到 数字硬件领域, 当代设计方法 依赖于硬件描述 语言

代码覆盖率测量值以百分比表示。不同的团队和项目设定自己的测试覆盖率目标。我不知道是否有行业"最佳实践"数字,但我的大多数项目都将这个数字设置为 80%。

例如,如果您正在处理一个具有大量 UI 代码的项目,则其单元测试覆盖率可能较低,但如果您正在处理库,则每个方法都有适当的单元测试。

对于 .NET,代码覆盖率的常用工具之一是 NCover。

正如其他人所提到的,覆盖率提供了一个衡量测试质量的指标,但这并不能告诉您有关测试测试代码测试情况的任何信息。 仅仅因为执行了一行,并不意味着该行的所有可能的排列都已执行。

您可能会发现 PEX 等工具的一些有用之处,它将使用各种输入测试您的代码,以查看在这些情况下的作用。 这将为您提供良好的覆盖(因为它将定制输入以通过代码生成所有可能路径的路径),但也将为您提供对可能输入的良好覆盖(例如确保您的方法使用 null 输入进行测试,或者采用列表的方法使用空列表或包含空项的列表进行测试等)

还有其他有趣的计划,例如删除代码行,重新编译和重新运行测试的工具。 如果在这种情况下没有测试失败,那么它假设您缺少测试,因为应该有一些东西取决于该行,否则为什么它在那里? 我会寻找一个链接。