有机会进行这项工作吗? 我希望我的测试由NAnt中的nunit2任务运行。 另外,我想运行NCover而不再次运行测试。
我想到了。您将NUnit启动器的路径更改为TeamCity自己的路径。这是一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| <mkdir dir="${build}/coverage" failonerror="false"/>
<!-- run the unit tests and generate code coverage -->
<property name="tools.dir.tmp" value="${tools.dir}"/>
<if test="${not path::is-path-rooted(tools.dir)}">
<property name="tools.dir.tmp" value="../../${tools.dir}"/>
</if>
<property name="nunitpath" value="${lib.dir}/${lib.nunit.basedir}/bin/nunit-console.exe"/>
<property name="nunitargs" value=""/>
<if test="${property::exists('teamcity.dotnet.nunitlauncher')}">
<property name="nunitpath" value="${teamcity.dotnet.nunitlauncher}"/>
<property name="nunitargs" value="v2.0 x86 NUnit-2.4.8"/>
</if>
<ncover program="${tools.dir.tmp}/${tools.ncover.basedir}/ncover.console.exe"
commandLineExe="${nunitpath}"
commandLineArgs="${nunitargs} ${proj.name.unix}.dll"
workingDirectory="${build}"
assemblyList="${proj.srcproj.name.unix}"
logFile="${build}/coverage/coverage.log"
excludeAttributes="System.CodeDom.Compiler.GeneratedCodeAttribute"
typeExclusionPatterns=".*?\\{.*?\\}.*?"
methodExclusionPatterns="get_.*?; set_.*?"
coverageFile="${build}/coverage/coverage.xml"
coverageHtmlDirectory="${build}/coverage/html/"
/> |
如您所见,我在那里有一些自己的变量,但是您应该能够弄清楚发生了什么。您关注的属性是teamcity.dotnet.nunitlauncher。您可以在http://www.jetbrains.net/confluence/display/TCD4/TeamCity+NUnit+Test+Launcher上阅读有关此内容的更多信息。
为什么不让NCover运行NUnit?您将获得完全相同的测试结果。另外,在测试之外运行NCover时,您到底想测量什么?还有其他方法可以查找陈旧或未引用的代码。
我必须做同样的事情。我认为我们能希望的最好的办法是打开TeamCity随附的NUnit jar文件,并编写一个集成NUnit2和NCover的自定义任务。我希望不是这样,但是NUnit2任务不会产生任何可见的输出,因此TeamCity显然没有读取StdOut来获取测试结果。