使用NANT通过NCover运行NUnit

3

我的单元测试已经执行并生成了报告,但是覆盖率的报告是空的。这是我使用的 Nant 任务:

<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="&quot;${nunit-console}&quot; ${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:

这是构建日志输出的示例(已编辑以确保安全):

<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>
3个回答

1

如果您的NCover许可证允许,建议升级到3.4.18。

仅从消息来看,似乎在您的NUnit进程上从未开始分析。

我无法从NAnt任务中看到确切的命令行语法,但是NCover必须启动NUnit才能对单元测试DLL进行分析。

如果NCover成功启动了NUnit,则应在“程序输出”之后看到一条消息,该消息说“进程'nunit-agent' [PID 3116]已开始分析”,然后是NUnit测试结果,在结果之后再次出现另一条消息,即“进程'nunit-agent' [PID 3116]已完成分析”。


感谢提供的信息,非常感激。只是为了我能够理解,即使通过NCover启动了NUnit,测试是否可能运行(因为我认为它们确实运行了),但分析器没有运行/附加?我需要什么命令行参数吗? - MalcomTucker
我同意看起来测试正在运行,但是NCover没有被分析。如果您像这样使用NCover启动NUnit: ncover.console.exe nunit-console.exe TestAssembly1.dll /nunit args //ncover argsNCover应该自动检测到nunit exes,但请尝试在NCover命令行中使用此参数以指定这些进程://pn nunit-agent.exe //pn nunit-console.exe或者,如果您正在运行32位版本,则使用//pn nunit-agent-x86.exe。说到位数,请确保运行相同位数的NCover和NUnit,不过如果您没有这样做,应该会收到错误消息。 - NCover Support

1

我记得曾经遇到过类似的问题。你是否将相关的.pdb文件放在程序集文件旁边了?这对我解决了问题。


0

这是关于PDB文件的一个好建议,但即使没有它们,你也应该得到分支覆盖率,尽管不会得到任何符号。


那么,给我的答案投票怎么样?毕竟我在为你工作。 - The Chairman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接