Строка, которая не существует, включается в динамический анализ покрытия кода в Visual Studio 2017 - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь проверить динамическое покрытие кода в 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, поэтому следуйте инструкциям:

  1. codecoverage collect /session:qwerty /output:mytest.coverage .\Debug\ConsoleApplication3.exe
  2. codecoverage shutdown /session:qwerty
  3. 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>. Мой вопрос, где находитсячто происходит и как от него избавиться (кроме ручного редактированияконечно)?

...