2010-10-28 24 views
2

我們使用AQTime的覆蓋率分析器來檢查單元測試的覆蓋率結果。它似乎一般工作沒問題,但有一個討厭的習慣高估覆蓋面,因爲一些功能根本沒有出現。我認爲這是因爲鏈接器已經剝離了它們,因爲它們沒有被調用,但顯然它並不理想,因爲我希望它們顯示爲「未覆蓋」。如何防止功能從覆蓋分析中排除?

有誰知道是否有辦法配置Visual C++或AQTime,這些函數將被正確標記爲「未覆蓋」?

回答

1

奇數。編譯器/鏈接器是否剝離它們,事實是,在測試執行結束時,它們沒有被執行的記錄。所以如果這個工具可以列出所有的功能,它應該沒有這樣的證據,因此它應該報告「未執行」。

我們的SD C++ Test Coverage工具沒有這種奇怪的行爲,至少不是如果您實際指定包含那些應該被檢測的編譯單元或頭文件的一部分的話。 (你可能無法列出包含一個函數體的ah頭文件,那麼它將不會被報告)。它甚至會報告一個已經被內聯的函數已經被執行,而不管它已經被內聯的地方的數量。

3

AQtime從模塊的調試信息中獲取例程列表。由於鏈接器已經剝離了一些例程,因此它們沒有調試信息,AQtime也不會「看到」它們。

通常,所有鏈接器都可以選擇啓用/禁用此功能。例如,在Visual C++項目中,此選項名爲參考文獻並位於鏈接器|優化屬性組。刪除此選項的值或將其設置爲否(/ OPT:NOREF)在您的應用程序的調試配置和鏈接器不會刪除未使用的功能。該選項記錄在here

+0

非常感謝您的回答 - 聽起來它會是相當理想的。不幸的是,我已經離開了那份工作,在我目前的工作中,我不再有權限訪問Visual Studio或AQTime的副本來確認它:( – Peter 2012-04-15 15:34:53