Как получить реальное покрытие кода с помощью vsinstr / vsperfmon - PullRequest
2 голосов
/ 18 сентября 2009

Моя среда разработки на базе Microsoft выглядит так: - огромная родная кодовая база c ++, разделенная на 10 проектов - у каждого проекта есть зависимый тестовый проект (модульные тесты GoogleTest), источники тестирования просто ссылаются.

Я сгенерировал отчет о покрытии, используя vsinstr и vsperfmon (инструменты Visual Studio для инструментирования / мониторинга исполняемых файлов и библиотек DLL), но это было не так удовлетворительно, как я ожидал, поскольку отчет показывает только охват строк модульного теста , а не из тестируемых источников (я проинструктировал исполняемый файл testsuite Sample_Project_Test.exe).

Например, если у меня есть такой метод:

(Sample_Project/add_ints.cpp)

int add(int a, int b){
  return a+b;
}

int add2(int a, int b){
  if (a == b)
    return a * 2;
  else
    return a+b;
}

и юнит тест выглядит так:

(Sample_Project_Test/int_adds_tests.cpp)    

TEST(AddTest, ReturnsCorrectSum) 
{
  EXPECT_EQ(4, add(2,2));
}

Я получаю покрытие линии 100%, потому что ТОЛЬКО надстройка в add_ints.cpp измеряется, кажется, что add2 полностью удален, потому что он не затронут. Насколько я не понял всю вещь покрытия неправильно, это кажется неправильным?

Ответы [ 2 ]

2 голосов
/ 27 марта 2012

Вам необходимо построить тесты с опцией компоновщика / OPT: NOREF, чтобы он связывался со всем кодом, а не только с используемым кодом.

0 голосов
/ 18 сентября 2009

У вас включена оптимизация в настройках вашей сборки?
Может быть, эти ссылки помогут вам: / GL (оптимизация всей программы) и / LTCG (генерация кода времени соединения)

...