Дружим TeamCity, NUnit и .NET Core

dotNET  /  Общее dotNET  /  JetBrains

Недавно я долго и мучительно переходил с .NET Core 1.x на 2.0. Возможно, расскажу об этом позже. Признаться, об этом лучше рассказывать в удобном кресле психоаналитика :)

Сегодня о более прозаичном. В нашей компании мы привыкли использовать TeamCity и NUnit. Для предыдущей версии .NET Core работал пакет “dotnet-test-nunit-teamcity”, для новой аналога не нашлось…

Для тех, кто не использует такую связку, поясню, зачем она. Конечно, можно просто запустить из TeamCity “dotnet test”. Но тогда мы получим сырой результат вида “ой упало, кури логи”. А в XXI веке хочется видеть список с прошедшими и упавшими тестами. Количество упавших тестов и затраты времени тоже полезно знать.

Поэтому, добавив после перехода на Core 2.0 к тестовым проектам “NUnit3TestAdapter”, я начал искать другие варианты. В NUnit не торопились делать вывод результатов в XML. Зато я нашёл на github простое обходное решение от разработчиков log4net:

dotnet test --logger:trx

После добавления этого параметра необходимо настроить TeamCity для обработки trx-файлов. Disclaimer: TeamCity у нас пока старый (10.0.4), в 2017.2, возможно есть другие варианты.

Необходимо добавить в Build Features фичу “XML Report Processing” и настроить шаблоны путей к trx-файлам для всех тестовых проектов. Получаем несколько строк вида:

    Project1/TestResults/*.trx
    Project2/TestResults/*.trx

После этого запускаем билд и наслаждаемся нормальными отчётами о тестах!

Чуть не забыл. Если у вас проблемы с определением тестов для .NET Core через NUnit3TestAdapter, вам может помочь такая настройка в csproj:

    <PropertyGroup>
        <DebugType Condition="'$(TargetFramework)' != '' 
            AND '$(TargetFramework)' != 'netcoreapp2.0'">Full</DebugType>
    </PropertyGroup>

P.S. Пользуясь случаем — всех с наступающим!

dotNET  /  Общее dotNET  /  JetBrains