Как получить покрытие кода с MvvmCross? - PullRequest
0 голосов
/ 12 декабря 2018

tl; др

Привет!Я пытаюсь выяснить, что такое покрытие кода для нашего приложения Xamarin (Xamarin.Android), разработанного с использованием MvvmCross с Visual Studio Community 2017 в Windows 10 .

Описание

Мы уже пытались сделать это дважды:

  • Первый раз, когда мы создали проект MSTest, в котором мы смогли запустить Test Explorer в Visual Studio, а также использовать SonnarQube для экспорта результатов.Хотя мы могли проверять дублирование кода, ошибки, уязвимости и запахи кода, SonarQube просто не сообщает о покрытии кода.

Мы поняли, что это потому, что проекты Xamarin используют .NET Standard вместо .NET Frameworkи SonarQube поддерживает только .NET Framework.Затем мы нашли эту ссылку с решением для Mac, которое я цитирую:

Похоже, лучшее решение, с которым мы столкнулись, - это скомпилировать тесты в исполняемый файл с NUnitLite.затем запустите программу профилирования журнала, mprof-report и ReportGenerator, чтобы сгенерировать окончательные HTML-файлы:

например,

mono --debug --profile=log:coverage,covfilter=+MyNamespace,covfilter=-NotMyNamespace,output=coverage.mlpd MyTests.exe --noresult

mprof-report --reports=coverage --coverage-out=coverage.xml coverage.mlpd

mono ./packages/ReportGenerator.2.5.6/tools/ReportGenerator.exe -reports:coverage.xml -targetdir:report

firefox ./report/index.htm

  • Итак, мы преобразовали наш тестовый проект для использования NUnit.Нам удалось подключить NUnit к Visual Studio с помощью NUnit.Adapter, мы смогли сделать из него исполняемый файл и установить Mono для Windows (x64) из двоичного установщика (* .msi).Когда мы запускаем первую команду, она возвращает результаты тестов, но также выдает ошибку:

Профилировщик 'log' не найден в главном исполняемом файле и не может быть загружениз 'mono-profiler-log'.

Следовательно, выходное покрытие отсутствует.На самом деле, кажется, что mprof-report также не установлено, даже в командной строке Mono.

Итак, есть ли ЛЮБОЙ способ выяснить, каков охват кода для нашего Xamarin?Проект MvvmCross, учитывая, что мы никоим образом не склонны покупать корпоративные версии программного обеспечения?Если да, то как это можно сделать?

1 Ответ

0 голосов
/ 13 декабря 2018

Наконец-то понял!Это определенно не совсем подходит для CI / CD (пока), но его можно использовать, чтобы хотя бы узнать текущее состояние модульных тестов в приложении MvvmCross Xamarin.

Кроме того, оно не охватывает проект Droid.Но поскольку мы используем MVVM, проект Droid должен содержать только представления, ресурсы и привязки в любом случае (в идеале).Так что, на мой взгляд, это не так важно, как другие проекты (AppCore, Services и т. Д.) ...

В любом случае, вот что я сделал:

  • Установите NUnit, NUnitLite, NUnit3TestAdapter, OpenCover и ReportGenerator (все они через NuGet, напрямую из Visual Studio)
  • Преобразование MSTest в NUnit
  • Сборка тестовв исполняемое консольное приложение с NUnitLite
  • * Измените debugType в buildOptions для каждого проекта решения приложения (кроме проекта Droid и любого имеющегося у вас тестового проекта) из "Portable "to" Full ": перейдите к Свойства проекта -> Сборка .Затем в Раздел вывода щелкните Дополнительно и выберите Отладочная информация -> Изменить на Полный .( Спасибо, m4ss1m0g! )
  • Теперь, запустите команды OpenCover и ReportGenerator (или измененный скрипт .bat ниже), чтобы ваш отчет о покрытии был сгенерирован в удобочитаемый файл .htm.Откройте файл .htm в браузере и - вуаля - вы сообщили о своем покрытии!

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

packages\OpenCover.4.6.519\tools\OpenCover.Console.exe -skipautoprops -output:<path-where-you-want-your-xml-results-to-be>\coverage.xml -target:<path-to-your-test-executable-generated-by-NUnitLite> -register:user -filter:"+[*]<your-solution-name>.* -[nunit*]* -[*<your-test-project-name>]*"

packages\ReportGenerator.4.0.4\tools\net47\ReportGenerator.exe -reports:<path-where-your-xml-results-output-are--same-as-output-path-above>\coverage.xml -targetdir:coverage

Obs :

  1. После выполнения действий, описанных выше, и подтвержденияэто работает, вы можете установить расширение AxoCover VisualStudio, которое предлагает практический способ увидеть текущее покрытие кода, вместо того, чтобы запускать скрипт .bat выше и перейти к папке, где находится файл output.htm.
  2. Третий шаг в процессе, описанном выше (отмечен *), является ключом, чтобы убедиться, что ваш тестовый исполняемый файл учитывает другие ваши проекты, помимо вашего тестового проекта.кт.
...