2011-10-31 55 views
3

我的單元測試正在執行並寫入報告,但覆蓋報告爲空。這是我正在使用的南特任務:使用Nover通過NCover運行NUnit

<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:

這是buildlog輸出(編輯的安全性)的樣品:

<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> 

回答

1

如果您的NCover許可證允許,建議升級到3.4.18。

僅基於這些消息,看起來分析從不會從NUnit進程開始。

我無法從NAnt任務看到確切的命令行語法,但NCover必須啓動NUnit才能剖析單元測試DLL。

如果NCover成功啓動NUnit,在NUnit測試結果之前,您應該在「程序輸出」後面看到一條消息,說明「Process'nunit-agent'[PID 3116]已開始分析」 「Process'nunit-agent'[PID 3116]已完成分析的結果」。

+0

感謝您的信息,非常感謝。就這樣,我明白了,是否可以運行測試(因爲我認爲他們這樣做),並且即使NUnit是通過NCover啓動的,分析器也不會運行/附加?有我需要的命令行參數嗎? – MalcomTucker

+0

我同意它看起來像測試正在運行,但NCover不分析。如果你用NCover啓動NUnit,例如: ncover.console.exe nunit-console.exe TestAssembly1.dll/nunit args // ncover args NCover應該自動檢測nunit exes,但試試這個arg您的NCover命令行來指定這些進程: // pn nunit-agent.exe // pn nunit-console.exe 或者,// pn nunit-agent-x86.exe,如果您正在運行32- bit版本。 說到位,確保你運行的是NCover和NUnit的相同位數,但是如果你不是,你應該得到一個錯誤信息。 –

1

我記得有一個類似的問題。您是否在彙編文件之外放置了相關的.pdb文件?這爲我解決了它。

0

這是一個很好的提示:PDB文件,但即使沒有它們,你也應該得到分支機構覆蓋率,儘管你不會得到任何符號。

+0

那麼投票我的答案呢。畢竟我在做你的工作 –