2009-09-18 15 views
2

我的基於微軟的開發環境,以獲得真正的代碼覆蓋率如下: - 巨大的本地C++代碼庫,分爲10個項目 - 每個項目都有一個相關的測試項目(GoogleTest單元測試)中,測試來源只是簡單的參考。如何使用vsinstr/vsperfmon

我使用vsinstr和vsperfmon(visual studio工具來監測/監控可執行文件和dll)生成覆蓋率報告,但這並不像我期望的那麼令人滿意,因爲報告僅顯示單元測試的覆蓋率行,而不是來自測試源(我測試了測試套件可執行的Sample_Project_Test.exe)。

例如,如果我有這樣的方法:

(Sample_Project/add_ints.cpp) 

int add(int a, int b){ 
    return a+b; 
} 

int add2(int a, int b){ 
    if (a == b) 
    return a * 2; 
    else 
    return a+b; 
} 

和單元測試是這樣的:

(Sample_Project_Test/int_adds_tests.cpp)  

TEST(AddTest, ReturnsCorrectSum) 
{ 
    EXPECT_EQ(4, add(2,2)); 
} 

我得到100%的線的覆蓋,因爲只有該加載部在add_ints.cpp中,add2似乎被完全刪除,因爲它沒有被觸及。據我不明白整個報道錯誤這似乎不正確?

+0

進一步的調查顯示,也包括但未被援引的類也不包括在覆蓋報告中。也許我錯過了一個命令行選項來包含它們呢? – lakai 2009-09-18 11:26:10

+1

順便說一句:問題應該可能更像「如何獲得_real_代碼覆蓋使用vsinstr/vsperfmon」 – Dmitry 2009-09-18 15:10:09

+0

感謝提示,改變了它! – lakai 2009-09-21 05:43:39

回答

0

您的生成設置中是否啓用了任何優化功能?
也許這些鏈接將幫助您: /GL (Whole Program Optimization)/LTCG (Link-time Code Generation)

+0

感謝提示,但啓用/禁用標誌並沒有改變任何東西。我認爲這一點在正確的方向,代碼似乎要麼沒有列出,因爲它的百分比是0%或從可執行的'刪除',以便它不能被檢測。 – lakai 2009-09-21 06:45:40

1

您需要使用鏈接器選項/ OPT建立自己的測試:NOREF,使其鏈接對所有的代碼,而不僅僅是使用的代碼。