在mono上使用Profiler来收集代码覆盖率信息不包括测试的dll

时间:2017-01-11 09:08:07

标签: macos xamarin mono nunit nunit-console

目前,我正在使用Mac上的Xamarin Studio开发Xamarin项目。我创建了一个NUnit测试项目来测试核心PCL 4.5库。在命令行上:

 mono --debug  --profile=log:report,coverage nunit3-console.exe bin/Debug/MyProject.Core.Tests.dll 

和我对输出的覆盖总结:

  

覆盖范围摘要:nunit.engine   (/Users/Stam/Desktop/NUnit/nunit.engine.dll)39%覆盖(656种方法)    - 258覆盖)NUnit.Engine.Services.ResultService 100%覆盖(4种方法 - 4覆盖)NUnit.Engine.Extensibility.ExtensionPoint 25%   覆盖(12种方法 - 3种覆盖)         NUnit.Engine.Services.TestFilterService 50%覆盖(2种方法 - 1   覆盖)NUnit.Engine.Agents.TestAgent 50%覆盖(10种方法 - 5   覆盖)NUnit.Engine.Internal.DirectoryFinder 75%覆盖(4   方法 - 3覆盖)NUnit.Engine.Services.TestAgency 88%覆盖   (17种方法 - 涵盖15种)NUnit.Engine.Internal.SettingsStore 75%   覆盖(4种方法 - 3种覆盖)   .....这里有更多的nunit集会

这里没有包含到dll中的程序集。

  1. 有没有办法做到这一点?

  2. 如果没有,我可以在Mac上使用其他非商业测试代码覆盖工具吗?

1 个答案:

答案 0 :(得分:2)

您需要通过以下方式在测试程序集中运行nunit3-console

--process=PROCESS

--inprocess

实施例

注意:这是删除所有NUnit程序集和包含[Test]的测试程序集,因此输出只包含用户代码

mono \
--debug \
--profile=log:coverage,onlycoverage,\
covfilter=-nunit3-console,\
covfilter=-nunit.framework,\
covfilter=-Mono.Cecil,\
covfilter=-NUnit.Engine,\
covfilter=-NUnit.Core,\
covfilter=-nunit.core,\
covfilter=-nunit.engine,\
covfilter=-nunit.v2.driver,\
covfilter=-TestAssembly \
packages/NUnit.ConsoleRunner.3.5.0/tools/nunit3-console.exe \
--noh \
--inprocess \
CodeCoverage/bin/Debug/TestAssembly.dll

输出:

>>mprof-report --reports=coverage output.mlpd

Coverage Summary:
    MyAssembly (/Users/sushi/Projects/CodeCoverage/CodeCoverage/bin/Debug/MyAssembly.dll) 50% covered (2 methods - 1 covered)
        MyAssembly.MyClass 50% covered (2 methods - 1 covered)