我有一个我需要进行单元测试的课程。
对于我在c#中开发并使用NUnit的背景,但我的问题更具理论性:
我不知道我是否编写了足够的测试方法,如果我检查了所有方案。 是否有已知的工作方法/最佳实践/规则集合?
像
这样的东西(这是可能的规则的一个愚蠢的例子,但如果我脑子里有些不傻的东西,我不会问这个问题)
答案 0 :(得分:5)
单元测试有几个可用的指标。查看代码覆盖率和正交测试。
但是,我会说这不是解决问题的最佳方法。虽然100%的代码覆盖率是一个令人钦佩的目标,但它可以成为一种模糊测试实际质量的指标。
就我个人而言,我认为通过调查测试驱动开发会得到更好的结果 - 使用这种方法,你知道你有很好的覆盖范围(无论是在代码行方面还是在类的功能方面),因为你一直在编写测试在你自己编写类方法之前练习你的课程。
答案 1 :(得分:0)
您可能希望查看测试覆盖率。 NCover是NUnit开发人员的代码覆盖解决方案。
答案 2 :(得分:0)
答案 3 :(得分:0)
测量代码中测试覆盖率的度量单位称为“代码覆盖率”。
根据Wikipedia:
代码覆盖率是用于的一种衡量标准 软件测试。它描述了 一个程度的源代码 程序已经过测试。这是一种形式 检查代码的测试 直接,因此是一种形式 白盒测试。及时,使用 代码覆盖范围已扩展到 数字硬件领域 当代设计方法论 它依赖于硬件描述 语言(HDLs)
代码覆盖率测量以百分比给出。不同的团队和项目设定了自己的测试覆盖目标。我不知道是否有行业“最佳实践”号码,但我的大部分项目都将此数字设定为80%。
例如,如果您正在处理具有大量UI代码的项目,那么单位测试覆盖率可能很低,但如果您正在使用库,则每个方法都可能具有适当的单位测试
对于.NET,代码覆盖的一种流行工具是NCover。
答案 4 :(得分:0)
正如其他人所提到的,Coverage提供了一个衡量测试质量的指标,但这并没有告诉您测试代码的测试情况。仅仅因为执行了一行,并不意味着该行的所有可能的排列都已被执行。
您可能会发现pex等工具的一些用处,它会使用各种输入测试您的代码,以查看在这些情况下的作用。这将为您提供良好的整体性(因为它将定制输入以通过您的代码生成通过所有可能路径的路径),但也将为您提供对可能输入的良好覆盖(例如确保您的方法使用空输入进行测试,或者获取列表的方法使用空列表或包含空项的列表等进行测试。)
还有其他一些有趣的举措,比如删除代码行,重新编译和重新运行测试的工具。如果在这种情况下没有测试失败,那么它会假设您缺少测试,因为应该有一些取决于该行,或者为什么它在那里?我会找一个链接。