У меня есть скрипт-оболочка для OpenCover, который запускает его с помощью NUnit. Сценарий дается:
- тестовая dll.
- NUnit, где фильтр.
- список сборок для ограничения покрытия (преобразован в фильтр OpenCover).
Я пытаюсь понять, как работает ограничение покрытия, и поэтому я дважды запускаю сценарий с тем же тестовым dll и NUnit, где filter, но с другим списком сборок.
Прогон № 1 - ограничение несколькими сборками, взятыми из данного файла решения
C:\Xyz\tip> Start-TestsWithCoverage .\UI\HcmAnywhereUnitTests\bin\Debug\HcmAnywhereUnitTests.dll -Where "namespace==HcmAnywhereUnitTests.Api" -SlnFile .\HcmAnywhere.sln
Using filter +[T4Utils]* +[TestContract]* +[DfVersioning]* +[XyzApi]* +[Xyz.Web.HcmAnywhereCommon]* +[OData]*
Executing: C:\Users\mkharitonov\AppData\Local\PackageManagement\NuGet\Packages\NUnit.ConsoleRunner.3.10.0\tools\nunit3-console.exe
Runtime Environment
OS Version: Microsoft Windows NT 10.0.17763.0
CLR Version: 4.0.30319.42000
Test Files
.\UI\HcmAnywhereUnitTests\bin\Debug\HcmAnywhereUnitTests.dll
Test Filters
Where: namespace==HcmAnywhereUnitTests.Api
Run Settings
ProcessModel: InProcess
DomainUsage: Single
DisposeRunners: True
WorkDirectory: C:\Xyz\tip
StopOnError: True
NumberOfTestWorkers: 1
ImageRuntimeVersion: 4.0.30319
ImageTargetFrameworkName: .NETFramework,Version=v4.7.2
ImageRequiresX86: False
ImageRequiresDefaultAppDomainAssemblyResolver: False
Test Run Summary
Overall result: Passed
Test Count: 132, Passed: 132, Failed: 0, Warnings: 0, Inconclusive: 0, Skipped: 0
Start time: 2019-06-11 22:57:47Z
End time: 2019-06-11 22:57:51Z
Duration: 4.163 seconds
Results (nunit3) saved as ~\AppData\Local\Temp\a24272_20190611185746\HcmAnywhereUnitTests.TestResult.xml
Committing...
Visited Classes 61 of 390 (15.64)
Visited Methods 202 of 2566 (7.87)
Visited Points 1125 of 6187 (18.18)
Visited Branches 523 of 4026 (12.99)
==== Alternative Results (includes all methods including those without corresponding source) ====
Alternative Visited Classes 61 of 548 (11.13)
Alternative Visited Methods 202 of 3166 (6.38)
Name Value
---- -----
CoverageResult ~\AppData\Local\Temp\a24272_20190611185746\HcmAnywhereUnitTests.CoverageResult.xml
TestResult ~\AppData\Local\Temp\a24272_20190611185746\HcmAnywhereUnitTests.TestResult.xml
C:\Xyz\tip>
Основные характеристики:
- Использование фильтра "
+[T4Utils]* +[TestContract]* +[DfVersioning]* +[XyzApi]* +[Xyz.Web.HcmAnywhereCommon]* +[OData]*"
- NUnit работал в течение 4 секунд
- Генерируемое покрытие
Прогон № 2 - ограничение одной сборкой
C:\Xyz\tip> Start-TestsWithCoverage .\UI\HcmAnywhereUnitTests\bin\Debug\HcmAnywhereUnitTests.dll -Where "namespace==HcmAnywhereUnitTests.Api" -AssemblyNames DataSvc
Using filter +[DataSvc]*
Executing: C:\Users\mkharitonov\AppData\Local\PackageManagement\NuGet\Packages\NUnit.ConsoleRunner.3.10.0\tools\nunit3-console.exe
Runtime Environment
OS Version: Microsoft Windows NT 10.0.17763.0
CLR Version: 4.0.30319.42000
Test Files
.\UI\HcmAnywhereUnitTests\bin\Debug\HcmAnywhereUnitTests.dll
Test Filters
Where: namespace==HcmAnywhereUnitTests.Api
Run Settings
ProcessModel: InProcess
DomainUsage: Single
DisposeRunners: True
WorkDirectory: C:\Xyz\tip
StopOnError: True
NumberOfTestWorkers: 1
ImageRuntimeVersion: 4.0.30319
ImageTargetFrameworkName: .NETFramework,Version=v4.7.2
ImageRequiresX86: False
ImageRequiresDefaultAppDomainAssemblyResolver: False
Test Run Summary
Overall result: Passed
Test Count: 132, Passed: 132, Failed: 0, Warnings: 0, Inconclusive: 0, Skipped: 0
Start time: 2019-06-11 22:58:56Z
End time: 2019-06-11 23:00:00Z
Duration: 63.416 seconds
Results (nunit3) saved as ~\AppData\Local\Temp\a24272_20190611185855\HcmAnywhereUnitTests.TestResult.xml
Committing...
No results, this could be for a number of reasons. The most common reasons are:
1) missing PDBs for the assemblies that match the filter please review the
output file and refer to the Usage guide (Usage.rtf) about filters.
2) the profiler may not be registered correctly, please refer to the Usage
guide and the -register switch.
Name Value
---- -----
CoverageResult ~\AppData\Local\Temp\a24272_20190611185855\HcmAnywhereUnitTests.CoverageResult.xml
TestResult ~\AppData\Local\Temp\a24272_20190611185855\HcmAnywhereUnitTests.TestResult.xml
C:\Xyz\tip>
Основные характеристики:
- Использование фильтра
"+[DataSvc]*"
- NUnit работал в течение 63 секунд
- Без покрытия
Проверка результатов
C:\Xyz\tip> cat ~\AppData\Local\Temp\a24272_20190611185746\HcmAnywhereUnitTests.CoverageResult.xml | sls "ModulePath.+DataSvc"
<ModulePath>C:\Xyz\tip\UI\HcmAnywhereUnitTests\bin\Debug\DataSvc.dll</ModulePath>
C:\Xyz\tip> cat ~\AppData\Local\Temp\a24272_20190611185855\HcmAnywhereUnitTests.CoverageResult.xml | sls "ModulePath.+DataSvc"
C:\Xyz\tip>
Существуют косвенные доказательства того, что DataSvc был профилирован во втором запуске - NUnit потребовалось 63 секунды, чтобы выполнить точно такие же тесты по сравнению с 4 секундами ранее. DataSvc действительно намного больше, чем все сборки в решении, представленном при первом запуске. Так что для меня это имеет смысл.
Но тогда почему нет покрытия? Что не так?