是否有很好的unit testing完整性

我有一个课我需要unit testing。

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

我不知道我是否已经编写了足够的测试方法,如果我检查了所有方案。 是否有已知的工作方法/最佳实践/规则集合?

就像是

  • “检查你class上的每一种方法…… bla bla”
  • “检查DB的所有插入… bla bla”

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

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

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

就个人而言,我认为通过调查测试驱动的开发会得到更好的结果 – 使用这种方法,你知道你有很好的覆盖范围(无论是代码行还是类的function),因为你一直在编写测试来练习你的在你自己编写类方法之前的类。

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

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

用于测量代码中测试覆盖率的度量单位称为“代码覆盖率”。

根据维基百科 :

代码覆盖率是软件测试中使用的度量。 它描述了程序源代码的测试程度。 它是一种直接检查代码的测试forms,因此是一种白盒测试forms。 随着时间的推移,代码覆盖的使用已经扩展到数字硬件领域,其当代设计方法依赖于硬件描述语言(HDL)

代码覆盖率测量以百分比给出。 不同的团队和项目设定了自己的测试覆盖目标。 我不知道是否有行业“最佳实践”号码,但我的大多数项目都将此数字设为80%。

例如,如果您正在处理具有大量UI代码的项目,那么unit testing覆盖率可能很低,但如果您正在使用库,则每个方法都可能进行适当的unit testing。

对于.NET,代码覆盖的流行工具之一是NCover 。

正如其他人所提到的,Coverage提供了一个衡量测试质量的指标,但这并没有告诉您测试测试代码的程度。 仅仅因为执行了一行,并不意味着该行的所有可能的排列都已被执行。

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

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