Я пытаюсь проверить динамическое покрытие кода в Visual Studio 2017 для C ++ после этого поста . Однако покрытие, похоже, выполняет строку, которой нет в программе вообще. Это простая программа, которую я использую для тестирования покрытия:
ConsoleApplication3.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "Running..." << endl;
if (false) {
cout << "shouldn't print" << endl;
}
#ifdef _WIN32
cout << "Running in WIN" << endl;
#else
cout << "Running in LIN" << endl;
#endif
}
Сначала я строю, используя флаг /PROFILE
(В обозревателе решенийзатем щелкните правой кнопкой мыши по проекту, затем Properties > Linker > Advanced > Profile > set to "Yes (/PROFILE)"
. Чтобы выполнить мои тесты, мне просто нужно выполнить ConsoleApplication3.exe
, поэтому следуйте инструкциям:
codecoverage collect /session:qwerty /output:mytest.coverage .\Debug\ConsoleApplication3.exe
codecoverage shutdown /session:qwerty
codecoverage analyze /output:mytestCoverage.xml .\mytest.coverage
ПРИМЕЧАНИЕ: в соответствии с постом, которым я поделился выше, не упоминается, что вам нужно включить .exe
в качестве аргумента. Это подразумевает, что вы можете начатьсбор и последующее выполнение ваших тестов, как только сбор начался. Однако из-за этого у меня остался пустой отчет, и я обнаружил, что он действительно создает настоящий отчет. Затем я преобразовал полученный файл mytest.coverage
в формат .xml
. вверх по mytestCoverage.xml
я вижу следующее:
mytestCoverage.xml
<?xml version="1.0" encoding="UTF-8"?>
<results>
<modules>
<module lines_not_covered="1" lines_partially_covered="0" lines_covered="6" blocks_not_covered="3" blocks_covered="10" line_coverage="85.71" block_coverage="76.92" id="A62F1CFD667E27408B95EED542B0A03801000000" path="consoleapplication3.exe" name="consoleapplication3.exe">
<functions>
<function lines_not_covered="1" lines_partially_covered="0" lines_covered="6" blocks_not_covered="3" blocks_covered="10" line_coverage="85.71" block_coverage="76.92" id="6832" name="_main" type_name="">
<ranges>
<range end_column="0" end_line="6" start_column="0" start_line="6" covered="yes" source_id="0" />
<range end_column="0" end_line="7" start_column="0" start_line="7" covered="yes" source_id="0" />
<range end_column="0" end_line="9" start_column="0" start_line="9" covered="yes" source_id="0" />
<range end_column="0" end_line="10" start_column="0" start_line="10" covered="no" source_id="0" />
<range end_column="0" end_line="14" start_column="0" start_line="14" covered="yes" source_id="0" />
<range end_column="0" end_line="19" start_column="0" start_line="19" covered="yes" source_id="0" />
<range end_column="0" end_line="15732480" start_column="0" start_line="15732480" covered="yes" source_id="0"/>
</ranges>
</function>
</functions>
-
<source_files>
<source_file id="0" path="c:\users\sakeeb_hossain\source\repos\consoleapplication3\consoleapplication3.cpp" checksum="87CCE2DD760287BB1A6A3CCF2BF8B930" checksum_type="MD5" />
</source_files>
</module>
</modules>
</results>
Посмотрите на последний тег <range>
. Мой вопрос, где находитсячто происходит и как от него избавиться (кроме ручного редактированияконечно)?