Setup Unit Test
- Clone Google Test repo https://github.com/google/googletest
- Checkout latest release tag (Optional)
- Install the gtest library with the following commands:
a. mkdir build
b. cd build
c. cmake ..
d. sudo make install
Setup Code Coverage
- Get lcov source code tar bar from http://ltp.sourceforge.net/coverage/lcov.php
- Extract lcov tar ball
- Execute sudo make install
Implementation
At the beginning of "CMakeLists.txt", include the "test" option to allow test running to be optional.
option(test "Build and tests." OFF) # Makes boolean 'test' available.
In addition, at the end of "CMakeLists.txt", include the following. Add more files under "add_executable" to include more unit tests.
if (test)
enable_testing()
add_executable(runUnitTests
main_test.cpp)
target_link_libraries(runUnitTests -pthread
gtest gtest_main
gcov
)
target_compile_options(runUnitTests PRIVATE
-std=c++11
-Wall
-fprofile-arcs
-ftest-coverage
)
add_test(NAME unittest COMMAND runUnitTests)
endif()
The following should be included in "main_test.cpp":
#include <gtest/gtest.h>
int main(int argc, char *argv[]) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Running Unit Test and Generate Code Coverage Report
./runUnitTests --gtest_output="xml:gtest.xml"
gcov main_test.cpp.gcno
lcov --capture --directory . --output-file LCOVOUTPUT.info
genhtml LCOVOUTPUT.info --output-directory ./code_coverage