次のようなテストコードがあります。
int diff21(int n)
{
if (n <= 21)
{
return 21 - n;
}
else
{
return (n - 21) * 2;
}
}
コンパイル フラグを追加しました:-fprofile-arcs -ftest-coverage
カバレッジ データを提供します。
テストコードを次のように書きました。
CU_ASSERT(diff21(19) == 2);
lcov を使用して html レポートを生成したところ、else
ブランチreturn (n - 21) * 2
が実行されたと表示されたので、100% の行カバレッジが得られました。本当じゃない
グーグルで検索したところ、これが原因であることがわかりました--- gcc の最適化により、いくつかの単純なコード行を他の行と組み合わせて削除できますが、フラグを使用しない場合、どのようにカバレッジ データを生成すればよいでしょうか?-fprofile-arcs -ftest-coverage
ところで、私は netbeans と cygwin を使用して単体テストを行っていますgcov
が、makefile やスクリプトを手動で呼び出すのは私にとって良いことではないと思います。
参考までに、私は次のようにlcovを使用しています:
#!/bin/bash
rm -rf coverage_report
rm -f app.info
lcov -b . -d . -c -o app.info
mkdir coverage_report
genhtml --legend --highlight -o coverage_report app.info
rm -f app.info
lcov -d . -z