是否有很好的单元测试完整性

时间:2011-05-18 08:29:27

标签: c# unit-testing nunit

我有一个我需要进行单元测试的课程。

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

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

这样的东西
  • “检查班上的每一种方法...... bla bla”
  • “检查DB的所有插入... bla bla”

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

5 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

根据Wikipedia

  

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

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

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

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

答案 4 :(得分:0)

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

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

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