MSBuild получает имена сборок тестов
Я работаю над созданием покрытия. Один из тестов занимал много времени, если фильтр OpenCover был просто +[*], поэтому я решил добавить имена сборок. Но это неэффективный подход, поскольку сборки могут увеличиваться. Я хочу сделать что-то вроде извлечения имени сборки из UnitTestAssemblies и передать его фильтрам в качестве аргумента с скобками и всем остальным.
UnitTestAssembly.Filename дает Assembly1.Tests, и я хочу, чтобы Assembly1 была добавлена в качестве фильтра.
<ItemGroup>
<UnitTestAssemblies Include="$(ProjectRoot)\**\bin\$(Configuration)\*.Tests.dll" />
</ItemGroup>
<Exec Command="$(OpenCoverToolPath)\OpenCover.Console.exe
-target:$(NUnitToolPath)\nunit3-console.exe
-register
-targetargs:%(UnitTestAssemblies.FullPath)
-filter:"+[Assembly1]* +[Assembly2]*"
-output:$(somepath)\%(UnitTestAssemblies.Filename).coverage.xml"
ContinueOnError="true" Timeout="1800000"/>
1 ответ
Решение
Я не уверен, эффективен ли этот подход, но у меня это сработало.
<ItemGroup>
<UnitTestAssemblies>
<AssemblyName>+[$([System.String]::Copy('%(Filename)').Replace('.Tests', ''))]*</AssemblyName>
<UnitTestAssemblies>
</ItemGroup>
<PropertyGroup>
<AssemblyFilters>@(UnitTestAssemblies->'%(AssemblyName)'->Distinct(), ' ')</AssemblyFilters>
<PropertyGroup>
Затем я прошел
$(AssemblyFilters)
как аргумент. -filters:"$(AssemblyFilters)"