Не удается получить плагин Gradle OpenCover для получения результатов покрытия
Я не получаю никаких результатов от opencover. Все мои тесты выполняются и проходят, просто нет результатов покрытия. проблема, кажется, в открытых фильтрах, но мы их не устанавливаем. Какие-либо предложения?
Файл CodeCoverage.xml содержит группу строк, подобных следующей, которые указывают, что плагин говорит opencover отфильтровать библиотеки DLL, которые мы пытаемся измерить.
<Module hash="A3-F0-3A-1A-FF-38-D7-EF-A2-55-C9-8B-84-37-CF-CF-00-80-70-23" skippedDueTo="Filter">
<FullName>C:\gitlab-runner\builds\83ebc972\0\active\scrpt\output\Scrpt.Core.dll</FullName>
<ModuleName>Scrpt.Core</ModuleName>
<Classes/></Module>
который имеет правильный путь для файла DLL, но я не понимаю, почему он пропускается из-за фильтрации. Модульные тесты содержатся в dll-файле Scrpt.Test.dll, а остальная часть кода находится в других библиотеках DLL, все из которых отфильтровываются.
Я использую следующие плагины
plugins {
id 'com.ullink.msbuild' version '2.15'
id 'com.ullink.nunit' version '1.8'
id 'com.ullink.opencover-nunit' version '1.6'
}
и определения плагинов для nunit и opencover:
nunit {
testAssemblies = [file('output/Scrpt.Tests.dll')]
shadowCopy = false
useX86 = true
ignoreFailures = false
}
opencover {
targetAssemblies = [file('output/Scrpt.dll'),file('output/Scrpt.Core.dll'),file('output/Scrpt.SourceCitations.dll'),file('output/ScrptUtilLib.dll')]
ignoreFailures = false
}
Спасибо за вашу помощь, херб
2 ответа
Вам нужно установить открытый фильтр. Открытый фильтр работает от инклюзивных и эксклюзивных фильтров.
Первый фильтр всегда должен быть примерно таким:
+[*]*
смысл включает в себя каждую сборку и каждый класс. затем добавьте в свои эксклюзивные фильтры:+[*]* -[AssemblyName]* -[*AnotherName]*
Это очень просто. просто сначала добавьте универсальный включающий фильтр, получите результаты, а затем начинайте постепенно исключать содержимое фильтра по одному.
Ответ был получен через Франсуа Вальди на https://github.com/Ullink/gradle-opencover-plugin/issues/17
Проблема оказалась в том, что плагин opencover не генерировал результаты cover.xml. В xml было сообщение об ошибке, в котором говорилось, что файлы, которые меня интересовали, были пропущены из-за фильтров, но я не смог найти, какие фильтры вызывали это.
Я закончил тем, что заменил плагин opencover на задачу, которая делает то же самое. Не уверен, почему плагин не работает, но замена по сути та же самая вещь в том, что он вызывает nunit, создает xml выходного покрытия, который sonarqube затем загружает. Плюс, сделав это таким образом, вы получите больший контроль над тем, где заканчиваются файлы.
Немного неловко, но это работает. Следующее заменило блок opencover в моем первоначальном вопросе.
task opencover(type:Exec) {
executable 'C:\\Program Files (x86)\\OpenCover\\OpenCover.Console.exe'
workingDir file('output')
args "-target:c:\\Program Files (x86)\\NUnit 2.6.4\\bin\\nunit-console-x86.exe", "-targetargs:c:\\gitlab-runner\\builds\\83ebc972\\0\\active\\scrpt\\output\\scrpt.tests.dll /noshadow", '-output:coverage.xml', '-filter:+[*]*'
}
Кстати, я попытался заменить file(), который используется в targetAssemblies для плагина opencover gradle, но это не дало никакого эффекта. Из того, что я прочитал, должно было сработать следующее.
opencover {
targetAssemblies = ['output/Scrpt.dll','output/Scrpt.Core.dll','output/Scrpt.SourceCitations.dll','output/ScrptUtilLib.dll']
ignoreFailures = false
}