通过与NANT的NCover运行NUnit
我正在执行单元测试并编写报告,但是覆盖率报告是空的。这是我正在使用的Nant任务:通过与NANT的NCover运行NUnit,nunit,nant,ncover,Nunit,Nant,Ncover,我正在执行单元测试并编写报告,但是覆盖率报告是空的。这是我正在使用的Nant任务: <target name="unitTests"> <foreach item="File" property="filename"> <in> <items> <include name="**\UnitTestBinaries\*.UnitTests.*.dll"><
<target name="unitTests">
<foreach item="File" property="filename">
<in>
<items>
<include name="**\UnitTestBinaries\*.UnitTests.*.dll"></include>
</items>
</in>
<do>
<exec program="${ncover-console}"
workingdir="${path::get-directory-name(filename)}"
commandline=""${nunit-console}" ${filename} /xml:${project::get-base-directory()}\_nunit_${path::get-file-name-without-extension(filename)}.xml /nologo //x ${project::get-base-directory()}\_ncover_${path::get-file-name-without-extension(filename)}.xml"
failonerror="true"
verbose="true"/>
</do>
</foreach>
</target>
知道我为什么没有得到覆盖率数据吗?有没有更简单的方法来实现这一步
谢谢你的帮助
编辑:
这是一个示例输出文件:
<!-- saved from NCover 3.0 Export url='http://www.ncover.com/' -->
<coverage profilerVersion="3.3.0.6070" driverVersion="3.3.0" exportversion="3" viewdisplayname="" startTime="2011-10-31T23:27:33.3688015Z" measureTime="2011-10-31T23:27:36.1420615Z" projectName="" buildid="d3a76074-bb16-4677-8273-91c7b6552066" coveragenodeid="0" failed="false" satisfactorybranchthreshold="95" satisfactorycoveragethreshold="95" satisfactorycyclomaticcomplexitythreshold="20" satisfactoryfunctionthreshold="80" satisfactoryunvisitedsequencepoints="10" uiviewtype="TreeView" viewguid="C:\_documents\CI\_ncover_XTFL.UnitTests.Core.xml" viewfilterstyle="None" viewreportstyle="SequencePointCoveragePercentage" viewsortstyle="Name">
<rebasedpaths />
<filters />
<documents>
<doc id="0" excluded="false" url="None" cs="" csa="00000000-0000-0000-0000-000000000000" om="0" nid="0" />
</documents>
</coverage>
编辑II:
这是buildlog输出的示例(为安全起见进行了编辑):
3278.1105000000002
如果您的NCover许可证允许,建议升级到3.4.18
仅基于这些消息,您的NUnit流程似乎从未开始过评测
我无法从NAnt任务中看到确切的命令行语法,但NCover必须启动NUnit才能分析单元测试DLL
如果NCover成功启动NUnit,您应该在“程序输出”之后看到一条消息,在NUnit测试结果之前显示“进程‘NUnit代理’[PID 3116]已开始评测”,在结果之后看到另一条消息,即“进程‘NUnit代理’[PID 3116]已完成评测”。我记得有类似的问题。是否将相关的
.pdb
文件放置在部件文件之外?这为我解决了问题。这是一个很好的提示:PDB文件,但即使没有它们,你也应该得到分支覆盖,尽管你不会得到任何符号。谢谢你提供的信息,非常感谢。正如我所理解的,即使NUnit是通过NCover启动的,测试是否可以运行(因为我认为它们可以),而探查器是否可以不运行/连接?我需要一个命令行参数吗?我同意看起来测试正在运行,但NCover没有评测。如果使用NCover启动NUnit,例如:NCover.console.exe NUnit-console.exe TestAssembly1.dll/NUnit args//NCover args NCover应自动检测NUnit exe,但请在NCover命令行中尝试此arg以指定以下进程://pn NUnit-agent.exe//pn NUnit console.exe或,//pn pn NUnit agent-x86.exe,如果您运行的是32位版本。说到比特,请确保您运行的NCover和NUnit的比特数相同,但如果不是,您应该会收到一条错误消息。毕竟我在做你的工作
<task name="ncover">
<message level="Info"><![CDATA[Command: C:\Program Files\NUnit 2.5.10\bin\net-2.0\nunit-console.exe]]></message>
<message level="Info"><![CDATA[Command Args: C:\_documents\CI\Working\UnitTestBinaries\XTFL.UnitTests.Workflow.dll /xml:C:\_documents\CI\_nunit_XTFL.UnitTests.Workflow.xml /nologo /noshadow]]></message>
<message level="Info"><![CDATA[Working Directory:]]></message>
<message level="Info"><![CDATA[Assemblies: (All Loaded Assemblies)]]></message>
<message level="Info"><![CDATA[******************* Program Output *******************]]></message>
<message level="Info"><![CDATA[ProcessModel: Default DomainUsage: Single]]></message>
<message level="Info"><![CDATA[Execution Runtime: Default]]></message>
<message level="Info"><![CDATA[..........]]></message>
<message level="Info"><![CDATA[Tests run: 10, Errors: 0, Failures: 0, Inconclusive: 0, Time: 0.9677115 seconds]]></message>
<message level="Info"><![CDATA[Not run: 0, Invalid: 0, Ignored: 0, Skipped: 0]]></message>
<message level="Info"><![CDATA[***************** End Program Output *****************]]></message>
<message level="Info"><![CDATA[Execution Time: 2.8983 s]]></message>
<message level="Info"><![CDATA[Coverage Xml: C:\_documents\CI\_ncover_XTFL.UnitTests.Workflow.xml]]></message>
<duration>3278.1105000000002</duration>
</task>