我将相同的源文件(C和Obj-C)编译成两个目标:单元测试可执行文件和实际产品(然后进行集成测试)。这两个目标构建在不同的位置,因此目标文件.gcno和.gcda文件是分开的。并非所有源文件都编译到单元测试中,因此并非所有对象都存在。所有源文件都编译到产品构建中。
有没有办法将两组.gcda文件组合起来,以获得单元测试和集成测试的总覆盖率(因为它们在产品版本上运行)?
我正在使用lcov。
Mac OS X 10.6,GCC 4.0
谢谢!
答案 0 :(得分:9)
最后,我设法通过lcov解决了我的问题。
基本上我做的是以下内容:
-fprofile-arcs -ftest-coverage --coverage
lcov --directory src/ --capture --output-file coverage_reports/app.info
genhtml -o coverage_reports/ coverage_reports/app.info
我希望这对某人有帮助。
答案 1 :(得分:6)
由于你正在使用lcov,你应该能够将gcov .gcda文件转换为lcov文件并将它们与lcov --add-tracefile
合并。
从联机帮助页:添加tracefile的内容。 使用-a开关指定多个跟踪文件,通过添加匹配测试和文件名组合的执行计数来组合这些文件中包含的coverage数据。
答案 2 :(得分:1)
我认为实现此目的的预期方法不是直接合并.gcda
文件,而是使用创建独立的覆盖率数据文件
lcov -o unittests.coverage -c -d unittests
lcov -o integrationtests.coverage -c -d integrationtests
每个覆盖数据然后代表一个“运行”。您当然可以创建单独的图形或html视图。但是您也可以使用--add-tracefile
,-a
来组合数据
lcov -o total.coverage -a unittests.coverage -a integrationtests.coverage
例如,您可以在total.coverage
中使用genhtml
生成总报告。
答案 3 :(得分:0)
我通过lcov multi -d参数合并它,如下所示。它有效。
lcov -c -d ./tmp/ -d ./tmp1/ -o ./tmp/coverage.info