Поделиться через


Устранение неполадок в объеме протестированного кода

Область применения: Visual Studio

Средство анализа объема протестированного кода в Visual Studio выполняет сбор данных для машинных и управляемых сборок (DLL- или EXE-файлы). Однако в некоторых случаях окно "Результаты покрытия кода" отображает ошибку, аналогичную "Пустые результаты , созданные: ....". Эта статья поможет устранить неполадки и устранить различные причины, по которым могут возникнуть пустые результаты.

Что вы должны увидеть?

При выборе команды Анализ покрытия кода в меню Тест (при условии успешной сборки и тестирования) в окне Покрытие кода должен отобразиться список результатов. Разверните элементы, чтобы просмотреть сведения о них.

Снимок экрана: результаты покрытия кода с цветом.

Дополнительные сведения см. в статье Использование параметра объема протестированного кода для определения объема протестированного кода.

Возможные причины отсутствия результатов или отображения старых результатов

Вы не используете правильный выпуск Visual Studio

Вам требуется Visual Studio Enterprise.

Тесты не выполнены

Анализ

Проверьте окно вывода. В раскрывающемся списке Показать выходные данные из: выберите Тесты. Проверьте, были ли зарегистрированы какие-либо предупреждения или ошибки.

Описание

Анализ покрытия кода выполняется во время выполнения тестов. Он включает только сборки, загруженные в память во время выполнения тестов. Если ни один из тестов не выполняется, это значит, что нет данных для включения в отчет о покрытии кода.

Решение

В обозревателе тестов выберите "Выполнить все ", чтобы убедиться, что тесты успешно выполняются. Исправьте все ошибки перед выполнением команды Анализ покрытия кода.

Отображается предыдущий результат

При изменении и повторном выполнении тестов может по-прежнему отображаться предыдущий результат анализа покрытия кода, включая цветовую разметку предыдущего запуска. Выполните следующие действия, чтобы устранить проблему:

  1. Выполните команду Анализ покрытия кода.
  2. Убедитесь в том, что в окне Результаты покрытия кода выбран последний набор результатов.

Недоступны PDB-файлы (файлы символов)

Анализ

Откройте целевую папку компиляции (обычно bin\debug) и убедитесь, что для каждой сборки есть PDB-файл в том же каталоге, что и файл .dll или .exe .

Описание

Подсистема покрытия кода требует, чтобы каждая сборка была связана с PDB-файлом , доступным во время тестового запуска. Если для определенной сборки нет PDB-файла , сборка не анализируется.

PDB-файл должен быть создан из той же сборки, что и DLL- или EXE-файл.

Решение

Убедитесь, что параметры сборки создают PDB-файл .

  • Если PDB-файлы не обновляются при построении проекта, откройте свойства проекта, выберите страницу "Сборка", выберите "Дополнительно" и проверьте сведения об отладке.

  • В Visual Studio 2022 и более поздних версиях для проектов C#, предназначенных для .NET Core или .NET 5+, откройте свойства проекта, перейдите на вкладку "Сборка ", выберите "Общие" и проверьте символы отладки.

  • Для проектов на C++ создаваемые PDB-файлы должны иметь полную отладочную информацию. Откройте свойства проекта и убедитесь в том, что для параметра Компоновщик>Отладка>Создавать отладочную информацию выбрано значение Создать сведения об отладке, оптимизированные для общего доступа и публикации (/DEBUG:FULL).

Если PDB-файл и DLL- или EXE-файл находятся в разных местах, скопируйте PDB-файл в тот же каталог. Кроме того, можно настроить подсистему покрытия кода для поиска PDB-файлов в другом расположении. См. дополнительные сведения по настройке анализа объема протестированного кода.

Используется инструментированные или оптимизированные двоичные данные

Анализ

Определите, подвергся ли двоичный файл любой форме расширенной оптимизации, например интерактивной оптимизации профиля или инструментирован инструментом профилирования, например vsinstr.exe или vsperfmon.exe.

Описание

Если сборка уже была инструментирована или оптимизирована другим средством профилирования, то сборка не учитывается в анализе покрытия кода. Для таких сборок невозможно выполнить анализ покрытия кода.

Решение

Отключите оптимизацию и используйте новую сборку.

Код не управляется (.NET) или собственный код (C++)

Анализ

Определите, выполняются ли некоторые тесты в управляемом или C++ коде.

Описание

Анализ покрытия кода в Visual Studio доступен только для управляемого и машинного кода (C++). При работе со средствами сторонних разработчиков часть кода или весь код может выполняться на другой платформе.

Решение

Недоступно.

Имя проекта включает DataCollector

Проекты, использующие DataCollector в имени проекта, не будут определяться покрытием кода.

Сборка установлена с помощью NGen

Анализ

Определите, загружается ли сборка из собственного кэша образов.

Описание

По соображениям производительности сборки собственных образов не анализируются. См. дополнительные сведения о файле Ngen.exe (генераторе образов в машинном коде).

Решение

Используйте MSIL-версию сборки. Не обрабатывайте ее с помощью NGen.

Настраиваемый файл .runsettings имеет проблемы с синтаксисом

Анализ

Если вы используете пользовательский файл .runsettings , он может содержать синтаксическую ошибку. Покрытие кода не выполняется, и окно покрытия кода не открывается в конце тестового запуска или отображает старые результаты.

Описание

Модульные тесты можно запустить с помощью пользовательского файла runettings , чтобы настроить параметры покрытия кода. С помощью параметров можно включать или исключать файлы. См. дополнительные сведения по настройке анализа объема протестированного кода.

Решение

Существует два возможных типа ошибок:

  • Ошибка XML

    Откройте RUNSETTINGS-файл в редакторе XML Visual Studio. Найдите ошибки.

  • Ошибка в регулярном выражении

    Каждая строка в файле представляет собой регулярное выражение. Проверьте каждую строку на наличие ошибок, в частности, следующих:

    • Несовпаденные скобки (...) или незаключенные скобки \(...\). Для сопоставления с круглыми скобками в строке поиска необходимо установить для них escape-последовательность. Например, для сопоставления с функцией используйте выражение .*MyFunction\(double\)
    • Звездочка или плюс в начале выражения. Для сопоставления с любой строкой символов используйте точку со следующей за ней звездочкой: .*

Пользовательский RUNSETTINGS-файл с неверными исключениями

Анализ

Если вы используете пользовательский файл .runsettings , убедитесь, что он включает сборку.

Описание

Модульные тесты можно запустить с помощью пользовательского файла runettings , чтобы настроить параметры покрытия кода. С помощью параметров можно включать или исключать файлы. См. дополнительные сведения по настройке анализа объема протестированного кода.

Решение

Удалите все Include узлы из файла runsettings , а затем удалите все Exclude узлы. Если это не решит проблему, последовательно верните их обратно.

Убедитесь, что узел DataCollectors определяет покрытие кода. Сравните его с примером в разделе Настройка анализа объема протестированного кода.

Часть кода всегда отображается как непокрытая

Код инициализации в машинных библиотеках DLL выполняется до инструментирования

Анализ

В статически связанном машинном коде часть функции инициализации DllMain и вызываемый ею код иногда отображаются как непокрытые, даже если код выполнен.

Описание

Анализатор покрытия кода вставляет инструментирование в сборку непосредственно перед началом выполнения приложения. В любой сборке, загруженной до этого времени, код инициализации в DllMain выполняется сразу после загрузки сборки и до выполнения приложения. Этот код будет отображаться как не протестированный. Обычно это применяется к статически загружаемым сборкам.

Решение

Нет.

Ссылки