Cpputestでカバレッジ測定をしてみたので、そのやり方を記載する。
#Makefile
cpputest-*.*\build内のMakefileWorker.mkの下記定義がデフォルトNとなっているために、gcovが使えないみたい。
# Use gcov, off by default
ifndef CPPUTEST_USE_GCOV
CPPUTEST_USE_GCOV = N
endif
#解決策
プロジェクト内のMakefileに上記定義をYにした一文を追加する。
#Set this to @ to keep the makefile quiet
SILENCE = @
#---- Outputs ----#
COMPONENT_NAME = Project
#Set this to @ to keep the makefile quiet
SILENCE = @
#--- Inputs ----#
PROJECT_HOME_DIR = .
ifeq "$(CPPUTEST_HOME)" ""
CPPUTEST_HOME = ../CppUTest
endif
CPP_PLATFORM = Gcc
SRC_DIRS = \
src\
src/*
# to pick specific files (rather than directories) use this:
SRC_FILES =
TEST_SRC_DIRS = \
tests \
tests/*
MOCKS_SRC_DIRS = \
mocks \
INCLUDE_DIRS =\
.\
include \
include/* \
$(CPPUTEST_HOME)/include/ \
$(CPPUTEST_HOME)/include/Platforms/Gcc\
mocks
CPPUTEST_WARNINGFLAGS = -Wall -Werror -Wswitch-default
CPPUTEST_WARNINGFLAGS += -Wconversion -Wswitch-enum
# gcovを使う場合'Y'に
CPPUTEST_USE_GCOV = Y
include $(CPPUTEST_HOME)/build/MakefileWorker.mk
変更後に下記コマンドを実行すると。
make -B gcov
lcov -c -d . -o (任意の名前).info
genhtml -o . (上記と同じ名前).info
ビルドが成功したら、プロジェクトフォルダにindex.htmlが生成される。
■index.html
■評価対象のファイルのカバレッジ状況
プラスα
さらにC1(条件網羅)カバレッジまで測定する方法を下記に示す。
make -B gcov
lcov -c -d --rc lcov_branch_coverage=1 . -o (任意の名前).info
genhtml --branch-coverage -o . (上記と同じ名前).info
※分岐のないファイルはBrancheが-で表示されるため、分岐のあるテスト対象で試してみてほしい。
■分岐のあるテストファイルの結果
赤色のdefault文のパスはこの評価で一度も通っていないことが示されている。