我正在使用只能生成EmmaXML报告的代码覆盖工具,而我需要的是Cobertura或gcov格式。是否已经存在一些用于进行转换的工具?如果没有,恐怕我必须自己做。 最佳答案 cover2cover已为此目的创建。 关于xml-是否有将EmmaXML报告转换为CoberturaXML格式的工具?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/10875642/
我正在使用QTCreator在C++中处理一个中型项目。项目结构基本上是这样的项目A组图书馆A1B组图书馆B1图书馆B2...等等测试LibA1_TestLibB1_TestLibB2_Test...等等库由测试项目中的可执行文件测试。我已经设法在启用gcov的情况下自行编译测试,并使用lcov生成代码覆盖率报告,但它们显示的覆盖率只是测试用例,而不是我正在测试的实际代码。我也尝试过使用gcov编译静态库,但是当我针对这些库运行测试时,它不会生成任何gcov输出文件。如何通过将我的项目库与测试链接起来来生成gcov输出文件?我想看看我的单元测试是否有任何漏洞。
今天我将矩阵类重写为constexpr。我对这个类有100%的单元测试覆盖率,但我注意到在我将几乎所有函数转换为constexpr之后,构造函数的一部分在lcov中被标记为根本不再被覆盖。这是只有构造函数的类。templateclassMatrix{static_assert(std::is_arithmetic::value,"Matrixcanonlybedeclaredwithatypewhere""std::is_arithmeticistrue.");public:constexprMatrix(std::initializer_list>matrix_data){if(ma
我正在从事一个使用几个boost库的项目。在查看我们的测试报告时,我们发现测试覆盖率信息有时确实适合我们的源代码。我能够追踪到boost::range。我认为这是因为库中的一些静态初始化,虽然我不能说更具体的事情。基本上,如果您使用gcc--coverage编译以下代码,运行它并使用gcov-b打印覆盖率报告,将会有四个额外的分支和额外的一行,我想忽略它。#includeintfoo(intx){returnx+1;}intmain(intargc,char*argv[]){returnfoo(argc);}覆盖率报告是:执行的行数:5的100.00%执行的分支:100.00%of4至
我有一个CMakeLists.txt文件,我在其中添加了:set(CMAKE_CXX_FLAGS"-fprofile-arcs-ftest-coverage-pthread-std=c++11-O0${CMAKE_CXX_FLAGS}")它正在生成报告文件:project_root/build/CMakeFiles/project.dir/但它生成的文件具有扩展名.cpp.gcno、.cpp.gcda和.cpp.o。此外,它们与src文件不在同一文件夹中,后者位于:project_root/src/当我将报告文件移动到src/文件夹并执行时$gcovmain.cppmain.gcno:
我正在尝试使用lcov(v1.13,在OSX上,使用clang作为编译器)为我的测试套件生成代码覆盖率,但我遇到了一个我不知道如何解决的恼人问题。SO上有几个类似的问题,但我找不到这个问题的解决方案。出于某种原因,函数/成员声明被标记为可访问但未执行,有点像下面的示例(这是header中的内联方法定义):这会使行覆盖率指标变得无用,所以我希望有一种方法可以修复它,而无需将每个声明都标记为LCOV_EXCL_LINE。使用的编译器标志非常标准:-g-O0-fno-inline-ftest-coverage-fprofile-arcs-fno-elide-constructors奇怪的是,
我在遵循本指南(我在另一篇文章中看到的推荐)时遇到困难https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake首先:Copythisfileintoyourcmakemodulespath.我怎么知道我的cmake模块路径是什么?UsethefunctionSETUP_TARGET_FOR_COVERAGEtocreateacustommaketarget具体是什么意思?我怎么做?具体来说,我必须在何处输入什么?我被迫使用cmake编译应用程序,否则我会使用gcc。 最佳答案
我的代码中有一些日志记录宏:#defineLOG_MSG(pri,msg,...)\if(pri>PriorityLevel)\printf(msg,##\__VA_ARGS__);我知道我可以使用LCOV_EXCL_START、LCOV_EXCL_STOP或LCOV_EXCL_LINE来抑制分支。但这只有在我调用LOG_MSG的每个地方都添加它时才有效:LOG_MSG(ERROR,"发生错误\n");//LCOV_EXCL_LINE我想在宏中包含该注释,但如果我将它放在那里,LCOV无法识别它。例如,这段代码仍然会产生分支。#defineLOG_MSG(pri,msg,...)\if
我希望为一个主要用C++编写的项目集成一个重要的跨平台构建系统。到目前为止,我已经评估了Cmake和Scons,虽然它们都代表了对(GNU)make的改进,但在context我正在尝试使用这些工具。这让我想到了BoostBuild(Bjam),我感到鼓舞的是,鉴于我的项目依赖于Boost,bjam应该可用于任何可行的目标平台已经。我在尝试为库的单元测试巧妙地集成代码覆盖时遇到了困难……以期最终集成到诸如Jenkins之类的构建服务器中。虽然我愿意接受Bjam最佳/标准实践的指导,但我认为我需要三个不同的“变体”:release-仅构建优化的静态库调试-构建未优化的静态库和单元测试覆盖率
是否可以使用gcov进行多线程应用程序的覆盖测试?我已经对我们的代码库进行了一些简单的测试,但如果能对我们正在实现的覆盖范围有一些了解就更好了。如果gcov不合适,任何人都可以推荐一个替代工具(可能是oprofile),最好有一些很好的入门文档。 最佳答案 我们当然使用gcov来获取我们的多线程应用程序的覆盖率信息。您想使用可以覆盖动态代码的gcc4.3进行编译。您使用-fprofile-arcs-ftest-coverage选项进行编译,代码将生成gcov然后可以处理的.gcda文件。我们单独构建我们的产品,并收集覆盖率,运行单元