首页 > 后端开发 > C++ > C IS中的C测试覆盖范围会教您如何使用

C IS中的C测试覆盖范围会教您如何使用

Linda Hamilton
发布: 2025-01-30 04:04:09
原创
519 人浏览过

软件测试覆盖率在软件开发中至关重要。测试确保软件按预期运行,而测试覆盖率则确保您检查了代码的所有可能性,两者相辅相成。许多现代语言在 50% 的情况下都具有生成覆盖率摘要的库或工具,但您知道 C 语言也有一个“原生”工具吗?

让我们从一个简单的只返回 ±42 的代码开始:

<code class="language-c">#include <stdbool.h>

int return_42(bool ret_neg) {
  if (ret_neg)
    return -42;
  return 42;
}</code>
登录后复制

现在是简单的测试文件:

<code class="language-c">#include <assert.h>
#include <stdbool.h>
#include <stdio.h>

int return_42(bool ret_neg);

int main() {
  assert(return_42(false) == 42);
  assert(return_42(true) == -42);
  puts("Nice");
  return 0;
}</code>
登录后复制

现在,我们可以使用 gcc/cc 编译器和 -fprofile-arcs-ftest-coverage 标记编译代码。

这将生成一个可执行文件和扩展名为 .gcno 的文件。

创建这些文件后,我们运行测试,运行结束后将创建扩展名为 .gcda 的文件。

有了这些新创建的文件,我们可以使用 gcov 工具处理它们(请先安装 gcov),然后执行 gcov 并传入 .gcda.gcno 文件名(通常它们与 .c 文件同名,但也可能不同)。这将生成扩展名为 .gcov 的文件。gcov 将提供一个关于覆盖率的小型摘要,但是对于超过一个简单的测试(例如,我在一个库中超过 120 个测试),我们需要更直观的显示结果。

接下来,我们将使用 lcov(请先安装 lcov),使用 -c-d .-o foobar.info 标记运行 lcov。它将生成一个名为 foobar.info 的文件,并打印覆盖率摘要。不幸的是,这个摘要没有说明哪些函数被检查到,但是有了创建的 .info 文件,我们可以使用 -l foobar.info 标记运行 lcov,它将打印一个更易读的表格摘要。然而,我们仍然只得到一个百分比,无法看到哪些行被检查到,因此让我们进入最后一步,使结果更易于可视化。

只需使用 genhtml,传入 foobar.info-o bar_html 标记。genhtml 将生成一个包含更易读的覆盖率摘要的文件夹(您可以随意打开此 html 文件,我个人最喜欢的打开方式是使用 python -m http.server -d bar_html)。

Cobertura de teste em C existe e vou te ensinar a usar

Cobertura de teste em C existe e vou te ensinar a usar

您也可以使用 clang,但标记会发生变化。由于我不太喜欢 clang,并且觉得最终结果不太美观,所以我没有深入研究,但据我尝试,所有功能都可以使用 llvm 运行,您只需安装两个 llvm 工具即可。

最后,genhtml 具有许多可定制的标记,我的常用标记如下:

Cobertura de teste em C existe e vou te ensinar a usar

Cobertura de teste em C existe e vou te ensinar a usar

好了,今天就到这里,下次再见!

以上是C IS中的C测试覆盖范围会教您如何使用的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板