我想尝试使用PartCover进行代码覆盖.我正在使用MSTest运行Visual Studio 2008 Professional.专业版不包括团队测试工具,如代码覆盖率.
所以,我正在尝试PartCover,但我无法让它工作.在PartCover.Browser中我选择了MSTest可执行文件,我已经将工作参数指向了我的tests.dll,并且我已经尝试将我的工作目录指向TestResults文件夹,但是我收到一个错误:
"报告为空.检查设置并再次运行目标."
我不知道下一步该尝试什么.
编辑
事实证明我有两个问题.首先,我没有把我的规则说得对.其次,我的工作论点中有空格.这些空间给出了错误,但没有出现在任何地方.
是的,我也有这个问题.查看规则字段的格式.
在浏览器中添加如下内容:
+[MyNamespace.MyAssemblyName]*
您指定的程序集名称是包含要覆盖的类型的程序集的名称.从以下开始:
+[*]*
并且partcover将很乐意为您提供单元测试项目的覆盖率指标,您引用的任何库以及其他.
从命令行中,在--include参数中指定相同的模式:
--include=[MyNamespace.MyAssembly]*
您还可以排除包含的命名空间或类型,或限制您在报表中获取覆盖数据的命名空间中的哪些类型.规则的格式是根据手册的正则表达式语法的子集(由asterix作为通配符和构成汇编和类名的字符组成,因此非常有限,但足以获得所需的数据).查看手册中有关规则的部分.如果您没有该手册,请从sourceforge下载.
在从NAnt脚本调用PartCover时,我必须经历一些步骤才能最终使PartCover工作.为了别人的方便,我收集了我必须做的一切; 请注意,其中一些已被其他人回答,但我花了很多时间把它们放在一起.
首先,正如在此处其他地方所述,如果您的操作系统是64位,则需要运行[最新的Windows SDK]\bin\CorFlags.exe [PartCover install dir]\PartCover.exe/32BIT +/Force
在PartCover安装之后,这是一次性步骤.它将更改可执行文件,并警告您需要重新签名程序集,但我没有这样做,它(最终)工作正常.请注意,即使CorFlags看起来没有按照您的要求进行操作并警告您签名,但它确实更改了.exe,它只是没有明确指出.
接下来,如果您的操作系统是64位,并且您在PartCover中使用NUnit(或其他测试exe),则需要调用为x86显式编译的版本.在NUnit的情况下,那将是nunit-console-x86.exe.在完成工作后,调用nunit-console.exe会无限期地挂起,而不会返回提示符.
接下来,正如在此处其他地方也回答的那样,即使在运行CorFlags之后,PartCover 2.3(一个开发构建版本)仍然无声地失败.但是,2.2工作.
接下来,当调用PartCover.exe时,参数的语法是 - arg-name ...和NOT - = arg-name(即破折号破折号空间arg名称,而不是破折号等于arg名称); PartCover文档似乎是双向的,但是等号对我来说不起作用.
在上面之后,PartCover最终从命令行开始工作.我使用了一个设置文件(您可以使用PartCover浏览器UI应用程序保存设置文件,然后可以从命令行使用),这样我指定的唯一参数就是设置文件的完整路径和输出报告文件命名完整路径.
当从NAnt脚本调用时,这仍然无效,所以我终于意识到必须引用arg值...并使用HTML编码的标记作为引号.从而...
NAnt摘录:
和PartCover设置文件:
C:\CI\Binaries\NUnit2.5.2\bin\net-2.0\nunit-console-x86.exe c:\Projects\MyProject\trunk\MyProject.Test\bin\Debug MyProject.Test.dll +[*]* -[log4net*]* -[nunit*]* -[MyProject.Test*]*
唷!希望这会让别人感到头疼.