Сбор покрытия C# (.NET 5 Linux, Ubuntu 20)
-
Устанавливаем .NET5 https://docs.microsoft.com/en-us/dotnet/core/install/linux-ubuntu#2004-
-
Устанавливаем сборщик покрытия https://github.com/lucaslorentz/minicover (я ставил как глобальный инструмент
dotnet tool install --global minicover
) -
Делаем тестовый проект
dotnet new console
(в качестве текста Project.cs я взял простейший калькулятор https://docs.microsoft.com/en-us/visualstudio/get-started/csharp/tutorial-console?view=vs-2019#add-code-to-create-a-calculator) -
Собираем проект
dotnet build
-
Инструментируем проект (опции подробно расписаны в описании инструментатора, путь к исходникам по умолчанию ведет в ./src, так что указываем принудительно)
minicover instrument --sources **/*.cs
илиminicover instrument --sources Program.cs
-
Самое главное - запускаем программу с no-build, иначе сборка перезатрется run`om -
dotnet run no-build
-
Покрытие собрано,
minicover report
даст простой отчет,minicover htmlreport
даст красивый отчет, есть и другие варианты отчетов - см. документацию minicover -
Если запустить тестовый калькулятор с разными командами (ну или подать наши сэмплы от фаззера в программу в цикле), мы в итоге получим кумулятивный отчет (до тех пор пока не выполним
minicover reset
)
Внимание! На момент 12.01.2022 minicover не поддерживает запуск при установленном и выбранном SDK .NET6. Однако не тестовой программе отработало временное решение:
- все команды по сборке тестовой программы, предназначенной для выполнения в среде .NET6, выполняем с использование SDK версии 6 (в моем случае 6.0.101)
- все команды minicover выполняем с использование SDK версии 5 (в моем случае 5.0.404). Я выполнял эти команды из отдельного каталога, не входящего в иерархию каталогов тестируемой программы. Перед работой с minicover выполнил в каталоге
dotnet new globaljson
и внёс в появившийся файл global.json следующее содержание:
{
"sdk": {
"version": "5.0.404"
}
}
- в итоге, если не перепутать каталоги (перед выполнение команд можно проверять себя выполняя
dotnet --info
и проверяя, нужную ли версию SDK вы сейчас используете), всё отрабытвает корректно. Проект выполняется в среде .NET6, а minicover работает в среде .NET5.