簡體   English   中英

如何使用 gcov(或其他免費工具)獲取 Google 測試 c++ 的每個測試覆蓋率

[英]how to get per test coverage for google tests c++ with gcov (or other free tool)

我想為我的 C++ 程序中的每個測試用例獲取每個測試覆蓋率。

我得到的是 GoogleTest 允許在每次測試之前和之后執行一些操作

#pragma once
#include <gtest/gtest.h>
#include <gcov.h>
class CodeCoverageListener : public ::testing::TestEventListener
{
public:
    virtual void OnTestProgramStart(const ::testing::UnitTest&) {}
    virtual void OnTestIterationStart(const ::testing::UnitTest&, int) {}
    virtual void OnEnvironmentsSetUpStart(const ::testing::UnitTest&) {}
    virtual void OnEnvironmentsSetUpEnd(const ::testing::UnitTest&) {}
    virtual void OnTestCaseStart(const ::testing::TestCase&) {}
    virtual void OnTestPartResult(const ::testing::TestPartResult&) {}
    virtual void OnTestCaseEnd(const ::testing::TestCase&) {}
    virtual void OnEnvironmentsTearDownStart(const ::testing::UnitTest&) {}
    virtual void OnEnvironmentsTearDownEnd(const ::testing::UnitTest&) {}
    virtual void OnTestIterationEnd(const ::testing::UnitTest&, int) {}
    virtual void OnTestProgramEnd(const ::testing::UnitTest&) {}

    virtual void OnTestStart(const ::testing::TestInfo& test_info)
    {
        __gcov_reset();
    }

    virtual void OnTestEnd(const ::testing::TestInfo& test_info)
    {
       __gcov_dump();
    }
};

然后你告訴 GoogleTest 這個

 ::testing::UnitTest::GetInstance()->listeners()
        .Append(new CodeCoverageListener);

但是在用 gcc4.8.5 編譯期間我得到錯誤:

 fatal error: gcov.h: No such file or directory
 #include <gcov.h>

如何告訴 gcc 在哪里尋找這個包含?

在使用 gcc8.4.1 編譯期間,我收到鏈接器錯誤:

 g++ -lgcov gcov.cpp
/tmp/ccK7o95R.o: In function `main':
gcov.cpp:(.text+0x5): undefined reference to `__gcov_reset()'
collect2: error: ld returned 1 exit status

如何將 gcov 鏈接到 C++ 程序?

gcov.h頭文件是 GCC 內部的,所以它沒有安裝在任何包含路徑中。 如果您想自己調用 gcov 函數(我不推薦這樣做),那么您必須自己聲明它們。

extern void __gcov_reset (void);
extern void __gcov_dump (void);

libgcov鏈接應該可以工作,但需要注意的是它是一個靜態庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM