二、从报表中取出覆盖率
一开始,我们可以试着使用Ant的XmlProperty任务来直接获得这个覆盖率,并给一个Ant属性。但是这个方法有以下两个问题:
1. 在coverage.xml中的覆盖率是一个小数,但当核对任务时需要一个整数百分比。
2. 在实际的项目中,coverage.xml的文件尺寸非常大,如果在Java中尝试使用XmlProperty任务时可能会出现Java OutOfMemoryError错误。而我们只想从coverage.xml文件中获得以下的内容:
<xslt in="coverage.xml" out="build/coverage.properties" style="src/xsl/coverage.xsl" />
上面的简单的XSL模板需要产生一个只包含我们需要的值的属性文件,内容如下:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="text" omit-xml-declaration="yes"/> <xsl:template match="coverage"> total.line-rate= <xsl:value-of select="floor(@line-rate*100)"/> </xsl:template> </xsl:stylesheet>
要注意的是方法floor(@line-rate*100),可以将小数覆盖率转换为整型覆盖率。最终结果是一个只包含下面一行的coverage.properties文件:
total.line-rate=44
现在我们可以使用Ant的属性任务来从coverage.properties读取这个Ant属性所需要的覆盖率:
<property file="build/coverage.properties" />
最后,我们可以将最初的"80"使用新的Ant属性替换,代码如下:
<cobertura-check totallinerate="${total.line-rate}"/>