﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-贤仁居-随笔分类-单元测试及相关技术</title><link>http://www.blogjava.net/gentoo1439/category/24525.html</link><description>学而不思则惘，思而不学则殆</description><language>zh-cn</language><lastBuildDate>Sat, 04 Aug 2007 11:27:15 GMT</lastBuildDate><pubDate>Sat, 04 Aug 2007 11:27:15 GMT</pubDate><ttl>60</ttl><item><title>一些Eclipse插件</title><link>http://www.blogjava.net/gentoo1439/archive/2007/08/03/134248.html</link><dc:creator>Gentoo</dc:creator><author>Gentoo</author><pubDate>Fri, 03 Aug 2007 07:01:00 GMT</pubDate><guid>http://www.blogjava.net/gentoo1439/archive/2007/08/03/134248.html</guid><wfw:comment>http://www.blogjava.net/gentoo1439/comments/134248.html</wfw:comment><comments>http://www.blogjava.net/gentoo1439/archive/2007/08/03/134248.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gentoo1439/comments/commentRss/134248.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gentoo1439/services/trackbacks/134248.html</trackback:ping><description><![CDATA[最近Eclipse老出问题，动不动就自动关闭，可能是因为plugin不兼容。我在使用Eclipse Europa，而一部分插件是我从Eclipse3.2中直接copy来的。但有一点不明白，Eclipse的SVN不能用，一打开就自动关闭，如果插件不兼容还可以理解，但是新装的Netbeans6.0（M10）也存在同样的问题，这就很郁闷了，原来用M8的时候没出现过这样的问题。莫非是我的JDK的问题？我的JDK是jrockit-R27.1.0-jdk1.5.0_08-windows-ia32.exe。<br>最近两周一直在看单元测试的文章及一些技术框架，有点忍受不了Eclipse了，决定从新解压一份，把最安装在Eclipse中的插件列到这里：<br>1.CheckStyle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<a href="http://eclipse-cs.sourceforge.net/update/">http://eclipse-cs.sourceforge.net/update/</a><br>2.coverlipse&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; <a href="http://coverlipse.sf.net/update">http://coverlipse.sf.net/update</a><br>3.CPD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<a href="http://pmd.sourceforge.net/eclipse/">http://pmd.sourceforge.net/eclipse/</a><br>4.Eclemma&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <a href="http://update.eclemma.org/">http://update.eclemma.org/</a><br>5.JDepend&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://andrei.gmxhome.de/eclipse/">http://andrei.gmxhome.de/eclipse/</a><br>6.Metrics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://metrics.sourceforge.net/update">http://metrics.sourceforge.net/update</a><br>
<img src ="http://www.blogjava.net/gentoo1439/aggbug/134248.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gentoo1439/" target="_blank">Gentoo</a> 2007-08-03 15:01 <a href="http://www.blogjava.net/gentoo1439/archive/2007/08/03/134248.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JUnit4抢先看（转）</title><link>http://www.blogjava.net/gentoo1439/archive/2007/08/01/133807.html</link><dc:creator>Gentoo</dc:creator><author>Gentoo</author><pubDate>Wed, 01 Aug 2007 07:13:00 GMT</pubDate><guid>http://www.blogjava.net/gentoo1439/archive/2007/08/01/133807.html</guid><wfw:comment>http://www.blogjava.net/gentoo1439/comments/133807.html</wfw:comment><comments>http://www.blogjava.net/gentoo1439/archive/2007/08/01/133807.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gentoo1439/comments/commentRss/133807.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gentoo1439/services/trackbacks/133807.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原文链接：http://www.ibm.com/developerworks/cn/java/j-junit4.htmlJUnit 是 Java? 语言事实上的 标准单元测试库。JUnit 4 是该库三年以来最具里程碑意义的一次发布。它的新特性主要是通过采用 Java 5 中的标记（annotation）而不是利用子类、反射或命名机制来识别测试，从而简化测试。在本文中，执着的代码测试人员 Elli...&nbsp;&nbsp;<a href='http://www.blogjava.net/gentoo1439/archive/2007/08/01/133807.html'>阅读全文</a><img src ="http://www.blogjava.net/gentoo1439/aggbug/133807.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gentoo1439/" target="_blank">Gentoo</a> 2007-08-01 15:13 <a href="http://www.blogjava.net/gentoo1439/archive/2007/08/01/133807.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Clover为JUnit测试做测试覆盖率分析</title><link>http://www.blogjava.net/gentoo1439/archive/2007/07/29/133055.html</link><dc:creator>Gentoo</dc:creator><author>Gentoo</author><pubDate>Sat, 28 Jul 2007 16:04:00 GMT</pubDate><guid>http://www.blogjava.net/gentoo1439/archive/2007/07/29/133055.html</guid><wfw:comment>http://www.blogjava.net/gentoo1439/comments/133055.html</wfw:comment><comments>http://www.blogjava.net/gentoo1439/archive/2007/07/29/133055.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gentoo1439/comments/commentRss/133055.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gentoo1439/services/trackbacks/133055.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 最近一直在看《JUnit in Action》一书，前几章看的还行，到第九章就出问题了，因为我的Cactus总是配置不好，运行不起来。前几章还讲到了很多框架，比如Jetty、EasyMock、Clover等，也只是用了一次，它们的深奥之处还未领悟多少。索性选中Clover，看其一二。<br>&nbsp;&nbsp;&nbsp; 《JUnit in Action》对Clover也是一带而过，只提了一下。在网上搜了半天，可参考的资料也很少，只有&#8220;java单元测试篇：使用clover为java代码的junit测试做覆盖率分析&#8221;一篇文章，转载的人很多，看了一些，发现文章中遗漏了很多代码，不知道是不是转载的问题。文中的例子是Junit包里带的，在Clover包的tutorial中也有，最后发现这篇文章是翻译的Clover的clover-manual.pdf中的Tutorials一章。读者可以参考其英文原文。<br>&nbsp;&nbsp;&nbsp; 下面还是简要的介绍一下Clover在JUnit中的使用（构建工具为Ant）：<br>&nbsp;&nbsp;&nbsp; 1.在使用Clover做测试覆盖率分析之前请确保您的代码及测试代码无误。<br>&nbsp;&nbsp;&nbsp; 2.如果采用Ant作为构建工具，则将clover.jar放入Ant的classpath下。也可采用另一种方法，可先将clover.jar及Clover中的另一个jar包cenquatasks.jar放入项目的lib下，采用cenquatasks.jar中的extendclasspath方法将clover.jar扩展到Ant下，在build.xml中加入以下代码：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">taskdef&nbsp;</span><span style="COLOR: #ff0000">resource</span><span style="COLOR: #0000ff">="com/cenqua/ant/antlib.xml"</span><span style="COLOR: #ff0000">&nbsp;classpath</span><span style="COLOR: #0000ff">="lib/cenquatasks.jar"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">extendclasspath&nbsp;</span><span style="COLOR: #ff0000">path</span><span style="COLOR: #0000ff">="lib/clover.jar"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">taskdef&nbsp;</span><span style="COLOR: #ff0000">resource</span><span style="COLOR: #0000ff">="clovertasks"</span><span style="COLOR: #ff0000">&nbsp;classpath</span><span style="COLOR: #0000ff">="lib/clover.jar"</span><span style="COLOR: #0000ff">/&gt;</span></div>
&nbsp;&nbsp;&nbsp; 3.添加clovertask到Ant中，如下：
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">taskdef&nbsp;</span><span style="COLOR: #ff0000">resource</span><span style="COLOR: #0000ff">="clovertasks"</span><span style="COLOR: #0000ff">/&gt;</span></div>
&nbsp;&nbsp;&nbsp; 4.在build.xml中加入clover的初始化任务：
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;clover.init</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="clover.init"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">clover-setup&nbsp;</span><span style="COLOR: #ff0000">initString</span><span style="COLOR: #0000ff">="clover_coverage.db"</span><span style="COLOR: #ff0000">&nbsp;preserve</span><span style="COLOR: #0000ff">="true"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span></div>
注意：步骤3中的代码可放入4中。<br>&nbsp;&nbsp;&nbsp; 5.加入一个或多个运行clover report的任务，最后的结果有多种输出方式：html、pdf、swing、xml等等。<br>其中，swing方式的代码如下：
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;show&nbsp;the&nbsp;clover&nbsp;coverage&nbsp;result&nbsp;with&nbsp;swing&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="clover.swing"</span><span style="COLOR: #ff0000">&nbsp;depends</span><span style="COLOR: #0000ff">="clover"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">clover-view</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span></div>
html方式如下：
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;show&nbsp;the&nbsp;clover&nbsp;coverage&nbsp;result&nbsp;with&nbsp;html&nbsp;file&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="clover.html"</span><span style="COLOR: #ff0000">&nbsp;depends</span><span style="COLOR: #0000ff">="clover"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">clover-report</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">current&nbsp;</span><span style="COLOR: #ff0000">outfile</span><span style="COLOR: #0000ff">="${target.dir}/clover"</span><span style="COLOR: #ff0000">&nbsp;title</span><span style="COLOR: #0000ff">="Clover&nbsp;Report"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">format&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="html"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">current</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">clover-report</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span></div>
&nbsp;&nbsp;&nbsp; 上面代码中都depends="clover"，这里clover任务只是为了简洁而设，代码如下：
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;runs&nbsp;the&nbsp;clover&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="clover"</span><span style="COLOR: #ff0000">&nbsp;depends</span><span style="COLOR: #0000ff">="clean,clover.init,compile,test"</span><span style="COLOR: #0000ff">/&gt;</span></div>
&nbsp;&nbsp;&nbsp; 通过以上代码的设置即可运行clover.swing 或者clover.html运行Clover查看测试代码的覆盖率。测试结果如下图所示：<img height=515 alt="" src="http://www.blogjava.net/images/blogjava_net/gentoo1439/coverage.jpg" width=700 border=0><br>&nbsp;&nbsp;&nbsp;&nbsp; 其中build.xml中的运行JUnit测试代码的任务如下：
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;runs&nbsp;the&nbsp;tests&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="test"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">java&nbsp;</span><span style="COLOR: #ff0000">classname</span><span style="COLOR: #0000ff">="MoneyTest"</span><span style="COLOR: #ff0000">&nbsp;&nbsp;fork</span><span style="COLOR: #0000ff">="yes"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">classpath&nbsp;</span><span style="COLOR: #ff0000">refid</span><span style="COLOR: #0000ff">="build.classpath"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">java</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span></div>
这是通过java命令运行的，也就是在MoneyTest.java中有main方法：
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_39_90_Open_Image onclick="this.style.display='none'; Codehighlighter1_39_90_Open_Text.style.display='none'; Codehighlighter1_39_90_Closed_Image.style.display='inline'; Codehighlighter1_39_90_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_39_90_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_39_90_Closed_Text.style.display='none'; Codehighlighter1_39_90_Open_Image.style.display='inline'; Codehighlighter1_39_90_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main(String&nbsp;args[])&nbsp;</span><span id=Codehighlighter1_39_90_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_39_90_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;junit.textui.TestRunner.run(MoneyTest.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
还可以直接通过junit命令运行，如下：
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="unittest"</span><span style="COLOR: #ff0000">&nbsp;depends</span><span style="COLOR: #0000ff">="clover.init,compile"</span><span style="COLOR: #ff0000">&nbsp;description</span><span style="COLOR: #0000ff">="Test&nbsp;the&nbsp;application"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">taskdef&nbsp;</span><span style="COLOR: #ff0000">resource</span><span style="COLOR: #0000ff">="clovertasks"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">echo&nbsp;</span><span style="COLOR: #ff0000">message</span><span style="COLOR: #0000ff">="Testing&nbsp;the&nbsp;application&nbsp;with&nbsp;junit<img src="http://www.blogjava.net/Images/dot.gif">.."</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">junit&nbsp;</span><span style="COLOR: #ff0000">haltonfailure</span><span style="COLOR: #0000ff">="true"</span><span style="COLOR: #ff0000">&nbsp;printsummary</span><span style="COLOR: #0000ff">="true"</span><span style="COLOR: #ff0000">&nbsp;&nbsp;fork</span><span style="COLOR: #0000ff">="true"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">classpath&nbsp;</span><span style="COLOR: #ff0000">refid</span><span style="COLOR: #0000ff">="build.classpath"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">classpath</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">pathelement&nbsp;</span><span style="COLOR: #ff0000">path</span><span style="COLOR: #0000ff">="${ant.home}/lib/clover.jar"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">classpath</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">formatter&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="brief"</span><span style="COLOR: #ff0000">&nbsp;usefile</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;test&nbsp;name="MoneyTest"/&gt;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">batchtest</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">fileset&nbsp;</span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${build}"</span><span style="COLOR: #ff0000">&nbsp;includes</span><span style="COLOR: #0000ff">="**/*Test.class"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">batchtest</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">junit</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span></div>
以上两种test方法都可使用。<br>&nbsp;&nbsp;&nbsp; 在所有任务中，首先要运行clover.init这样就能启动clover，对后面的任务进行监控并adapt一些操作，在随后的compile过程中，clover会记录所编译的java文件的各种数据并存入其db数据库，clover会监控随后运行的UnitTest，计算测试的覆盖率并写入数据库。这里有一点要注意：无论是采用java方式还是junit方式运行test房间，都要在命令中加入属性fork="true"，这是因为clover要在JVM shutdown的时候将数据写入数据库，如果没有这个属性，就会出现&#8220;no coverage data found for *.db&#8221;错误，出现测试覆盖率均为0的结果。 
<img src ="http://www.blogjava.net/gentoo1439/aggbug/133055.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gentoo1439/" target="_blank">Gentoo</a> 2007-07-29 00:04 <a href="http://www.blogjava.net/gentoo1439/archive/2007/07/29/133055.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>