c# - 测试中的代码覆盖率

标签 c# .net testing tdd code-coverage

我最近开始使用 TDD,或者你可以说是对我的项目进行测试,然后我发现了一些新事物(对我来说是新事物),称为“代码覆盖率”,它显示了在测试过程中你的代码被覆盖了多少。据我所知,大多数前辈过去常说不可能有 100% 的代码覆盖率,或者获得 100% 的代码覆盖率不是好的做法。这件事让我想知道这个代码覆盖率是如何工作的,我的意思是它们覆盖了哪些基础上的代码?请说出Testing的主要用途。

我附上了这个问题的代码覆盖图像。 enter image description here

最佳答案

实际上,100% 的代码覆盖率是可能的,但在一定程度上取决于语言:

  • 有时不考虑导入或包含语句,因此 100% 是不可能的
  • 这主要取决于所使用的工具(例如上面的行是否被忽略)
  • 如果因为没有测试异常而没有达到 100%,那就不好了。还应进行恶劣天气测试

关于 100% 代码覆盖率的有用性:

  • 当然是越高越好
  • 至少应该测试所有行,尤其是在 Python 等不太强大的语言中。在 C/C# 等中,编译器会找到更多,但即便如此,也欢迎高代码覆盖率

即使 100% 的代码覆盖率也不意味着代码是完美的:

  • 测试了一行,并不意味着执行了整行(就像“if x && y”中的 if 语句的一半...如果 x 结果为 False,则不再检查 y。<
  • 由于循环和程序流的顺序,变量的值可能不同,从而导致异常。 因此,检查值的组合也很重要。

添加:

如果不需要 100% 的代码覆盖率(因为一切都需要时间,因此需要金钱),首先关注代码中的高风险区域。首先跳过琐碎的方法,从复杂/高风险的函数开始。

使用设计模式或代码结构来“帮助”单元测试也很重要:

  • 从逻辑代码中拆分 (G)UI。 (G)UI 代码大多更难进行单元测试。
  • 使用小函数,以简化单元测试(并进行清晰的设计)。
  • 使代码尽可能松散连接。这样可以形成清晰的设计,还有助于轻松进行单元测试(无需使用大量 stub )。
  • 考虑一个测试“框架”,例如使用 stub ,包括向 stub 注入(inject)值,以测试好天气和坏天气情况。

关于c# - 测试中的代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19156214/

相关文章:

c# - 小数点后 3 位的 Math.Round 数

.net - 使用 CLR 将数据从 Excel 导入到 SQL Server 时出错

java - Spring @DataJpaTest 抛出未知实体异常

c# - 从 aspx 向 Firefox 提供一个 exe。 Firefox 将其下载为 "Content"。文件名不正确且没有扩展名

c# - 面板应该淡入然后加载新场景

c# - 从 Azure webjob 将文件上传到 Dropbox

.net - 默认的 netcore docker-compose 模板如何工作?

c# - 通过 Rest Call 查询 Windows Azure Active Directory Graph Api

grails - controller.modelAndView 在集成测试中为空

testing - WebDriver SelectElement 获取选择的值