2

私のマイクロソフトベースの開発環境は次のようになります: - 10 個のプロジェクトに分割された巨大なネイティブ C++ コードベース - 各プロジェクトには依存するテスト プロジェクト (GoogleTest ユニット テスト) があり、テストするソースは単に参照されます。

vsinstr と vsperfmon (実行可能ファイルと 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));
}

add_ints.cpp の add-part のみが測定され、add2 は触れられていないため完全に削除されているように見えるため、100% のライン カバレッジが得られます。カバレッジ全体が間違っていることを理解していない限り、これは正しくないようです?

4

2 に答える 2

2

リンカー オプション /OPT:NOREF を使用してテストをビルドし、使用されているコードだけでなく、すべてのコードに対してリンクするようにする必要があります。

于 2012-03-27T05:46:23.183 に答える
0

ビルド設定で最適化を有効にしていますか?
たぶんそれらのリンクはあなたを助けるでしょう: / GL(プログラム全体の最適化)/ LTCG(リンク時コード生成)

于 2009-09-18T14:59:33.427 に答える