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


Устранение неполадок с покрытием кода

Применимо к: Visual Studio

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

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

Если в меню Тест выбрана команда Анализ объема кода, а сборка и тесты успешно выполняются, в окне "Покрытие кода" отобразится список результатов. Для просмотра сведений может потребоваться развернуть элементы.

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

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

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

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

Вам нужно Visual Studio Enterprise.

Тесты не выполнялись

Анализ

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

Описание

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

Решение

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

Вы просматриваете предыдущий результат

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

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

PDB-файлы (symbol) недоступны

Анализ

Откройте целевую папку компиляции (обычно 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 , он может содержать синтаксическую ошибку. Покрытие кода не выполняется, и окно покрытия кода не открывается в конце тестового запуска или отображает старые результаты.

Описание

Модульные тесты можно выполнить с помощью пользовательского файла .runsettings для настройки параметров покрытия кода. Эти параметры позволяют включать или исключать файлы. Дополнительные сведения см. в разделе Настройка анализа покрытия кода.

Решение

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

  • Ошибка XML

    Откройте файл .runsettings в редакторе XML Visual Studio. Найдите признаки ошибок.

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

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

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

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

Анализ

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

Описание

Модульные тесты можно выполнить с помощью пользовательского файла .runsettings для настройки параметров покрытия кода. Эти параметры позволяют включать или исключать файлы. Дополнительные сведения см. в разделе Настройка анализа покрытия кода.

Решение

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

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

Некоторые коды всегда отображаются как не охваченные

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

Анализ

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

Описание

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

Решение

Нет.

Ссылки