首頁 > 後端開發 > 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板