我想尝试一下PartCover的代码覆盖率。我正在用MSTest运行VisualStudio2008Professional。专业版不包括团队测试工具,比如代码覆盖率。
所以,我正在尝试PartCover,但我无法让它工作。在PartCover.Browser中,我选择了MSTest可执行文件,我将工作参数指向我的tests.dll,并且尝试将工作目录指向TestResults文件夹,但我得到了一个错误:
“报告为空。请检查设置并再次运行目标。”
我不知道下一步该做什么。
编辑
结果发现我有两个问题。首先,我没有把我的规则做好。第二,我在我的工作论点中有空间。空格出现了错误,但没有出现在任何地方。
发布于 2008-12-12 18:50:01
是的,我也有这个问题。查看规则字段的格式。
在浏览器中添加如下内容:
+[MyNamespace.MyAssemblyName]*
指定的程序集名称是包含要覆盖的类型的程序集的名称。一开始:
+[*]*
partcover将很高兴地为您提供单元测试项目的覆盖率度量,以及您所引用的任何库。
在命令行中,您在--包括参数:--include=[MyNamespace.MyAssembly]*中指定了相同的模式
还可以从报表中获取覆盖率数据的命名空间中排除包含的命名空间或类型或限制哪些类型。根据手册,规则的格式是正则表达式语法的子集(由asterix作为通配符和组成程序集和类名的字符组成,非常有限,但足以获取所需的数据)。请查看手册中关于规则的部分。如果你没有手册,从sourceforge下载。
发布于 2010-01-20 07:50:47
我在PartCover报告中也有同样的问题。因此,我一直在努力使它正常工作,我刚刚发现问题在于PartCover发行版附带的两个XSLT文件。
我修复了这些文件,现在一切都很好:
汇编报告
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxml="urn:schemas-microsoft-com:xslt">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="cov0style" select="'background:#E79090;text-align:right;'"/>
<xsl:variable name="cov20style" select="'background:#D79797;text-align:right;'"/>
<xsl:variable name="cov40style" select="'background:#D7A0A0;text-align:right;'"/>
<xsl:variable name="cov60style" select="'background:#C7A7A7;text-align:right;'"/>
<xsl:variable name="cov80style" select="'background:#C0B0B0;text-align:right;'"/>
<xsl:variable name="cov100style" select="'background:#D7D7D7;text-align:right;'"/>
<table style="border-collapse: collapse;">
<tr style="font-weight:bold; background:whitesmoke;">
<td colspan="2">Coverage by assembly</td>
</tr>
<xsl:variable name="asms" select="/PartCoverReport/Assembly"/>
<xsl:for-each select="$asms">
<xsl:variable name="current-asm-node" select="."/>
<tr>
<xsl:element name="td">
<xsl:attribute name="style">background:ghostwhite; padding: 5px 30px 5px 5px;</xsl:attribute>
<xsl:value-of select="$current-asm-node/@name"/>
</xsl:element>
<xsl:variable name="codeSize" select="sum(/PartCoverReport/Type[@asmref=$current-asm-node/@id]/Method/pt/@len)+0"/>
<xsl:variable name="coveredCodeSize" select="sum(/PartCoverReport/Type[@asmref=$current-asm-node/@id]/Method/pt[@visit>0]/@len)+0"/>
<xsl:element name="td">
<xsl:if test="$codeSize=0">
<xsl:attribute name="style">
<xsl:value-of select="$cov0style"/>
</xsl:attribute>
0%
</xsl:if>
<xsl:if test="$codeSize > 0">
<xsl:variable name="coverage" select="ceiling(100 * $coveredCodeSize div $codeSize)"/>
<xsl:if test="$coverage >= 0 and $coverage < 20">
<xsl:attribute name="style">
<xsl:value-of select="$cov20style"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="$coverage >= 20 and $coverage < 40">
<xsl:attribute name="style">
<xsl:value-of select="$cov40style"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="$coverage >= 40 and $coverage < 60">
<xsl:attribute name="style">
<xsl:value-of select="$cov60style"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="$coverage >= 60 and $coverage < 80">
<xsl:attribute name="style">
<xsl:value-of select="$cov80style"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="$coverage >= 80">
<xsl:attribute name="style">
<xsl:value-of select="$cov100style"/>
</xsl:attribute>
</xsl:if>
<xsl:value-of select="$coverage"/>%
</xsl:if>
</xsl:element>
</tr>
</xsl:for-each>
</table>按班报告
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxml="urn:schemas-microsoft-com:xslt">
<xsl:output method="html" indent="no"/>
<xsl:template match="/">
<xsl:variable name="cov0style" select="'background:#FF4040;text-align:right;'"/>
<xsl:variable name="cov20style" select="'background:#F06060;text-align:right;'"/>
<xsl:variable name="cov40style" select="'background:#E78080;text-align:right;'"/>
<xsl:variable name="cov60style" select="'background:#E0A0A0;text-align:right;'"/>
<xsl:variable name="cov80style" select="'background:#D7B0B0;text-align:right;'"/>
<xsl:variable name="cov100style" select="'background:#E0E0E0;text-align:right;'"/>
<table style="border-collapse: collapse;">
<tr style="font-weight:bold; background:whitesmoke;"><td colspan="2">Coverage by class</td></tr>
<xsl:for-each select="/PartCoverReport/Type">
<tr>
<xsl:element name="td">
<xsl:attribute name="style">background:ghostwhite; padding: 5px 30px 5px 5px;</xsl:attribute>
<xsl:value-of select="@name"/>
</xsl:element>
<xsl:variable name="codeSize" select="sum(./Method/pt/@len)+0"/>
<xsl:variable name="coveredCodeSize" select="sum(./Method/pt[@visit>0]/@len)+0"/>
<xsl:element name="td">
<xsl:if test="$codeSize=0">
<xsl:attribute name="style"><xsl:value-of select="$cov0style"/></xsl:attribute>
0%
</xsl:if>
<xsl:if test="$codeSize > 0">
<xsl:variable name="coverage" select="ceiling(100 * $coveredCodeSize div $codeSize)"/>
<xsl:if test="$coverage >= 0 and $coverage < 20"><xsl:attribute name="style"><xsl:value-of select="$cov20style"/></xsl:attribute></xsl:if>
<xsl:if test="$coverage >= 20 and $coverage < 40"><xsl:attribute name="style"><xsl:value-of select="$cov40style"/></xsl:attribute></xsl:if>
<xsl:if test="$coverage >= 40 and $coverage < 60"><xsl:attribute name="style"><xsl:value-of select="$cov60style"/></xsl:attribute></xsl:if>
<xsl:if test="$coverage >= 60 and $coverage < 80"><xsl:attribute name="style"><xsl:value-of select="$cov80style"/></xsl:attribute></xsl:if>
<xsl:if test="$coverage >= 80"><xsl:attribute name="style"><xsl:value-of select="$cov100style"/></xsl:attribute></xsl:if>
<xsl:value-of select="$coverage"/>%
</xsl:if>
</xsl:element>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>我希望你觉得这很有用。此外,任何有关该文件的反馈都是受欢迎的,因此我们可以为通信提供正确的文件。见这个相关的问题
发布于 2010-11-12 15:53:58
@pelazm --谢谢您的指导。
要添加到解决方案中的两件小事:
(a)如果您不想使用外部PartCover.settings.xml
<!-- Runs unit tests through PartCover to calculate unit test covereage-->
<!-- Use %2a instead of * and %3f instead of ? to prevent expansion -->
<!-- %40 = @ %25 = % %24 = $ -->
<Target Name="RunTests">
<ItemGroup>
<pc4_settings Include="--target "$(NUnitEXE)""/>
<pc4_settings Include="--target-work-dir "$(RootDirectory)\src""/>
<pc4_settings Include="--include [%2a]%2a"/>
<pc4_settings Include="--exclude [nunit%2a]%2a"/>
<pc4_settings Include="--exclude [log4net%2a]%2a"/>
<pc4_settings Include="--exclude [MetadataProcessor.Tests%2a]%2a"/>
</ItemGroup>
<CreateItem Include="$(RootDirectory)\src\**\bin\$(Configuration)\*.Tests.dll">
<Output TaskParameter="Include" ItemName="TestAssemblies" />
</CreateItem>
<Exec Command=""$(PartCover4Directory)\PartCover.exe" --register @(pc4_settings,' ') --target-args "%(TestAssemblies.Identity) $(NUnitArgs) /xml:%(TestAssemblies.Identity).NUnitResults.xml" --output $(BuildDirectory)\PartCover-results.xml"
ContinueOnError="true"
WorkingDirectory="$(BuildDirectory)">
<Output TaskParameter="ExitCode" ItemName="ExitCodes"/>
</Exec>
<XslTransformation XslInputPath="$(RootDirectory)\tools\partcover4\xslt\PartCoverFullReport.xslt"
XmlInputPaths="$(BuildDirectory)\PartCover-results.xml"
OutputPaths="$(BuildDirectory)\PartCover-results-PartCoverFullReport.html" />
<Error Text="Test error occurred" Condition="'%(ExitCodes.Identity)'>0"/>
</Target>(b) Gáspár Nagy的HTML报告相当不错-- http://gasparnagy.blogspot.com/2010/09/detailed-report-for-partcover-in.html
https://stackoverflow.com/questions/363740
复制相似问题