﻿<?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-pengpenglin-随笔分类-Java 工具</title><link>http://www.blogjava.net/pengpenglin/category/28490.html</link><description>成熟 稳重 乐观 自信 进取 责任 梦想 坚持</description><language>zh-cn</language><lastBuildDate>Wed, 07 Apr 2010 07:47:35 GMT</lastBuildDate><pubDate>Wed, 07 Apr 2010 07:47:35 GMT</pubDate><ttl>60</ttl><item><title>【推荐】一款好用的Java反编译工具：jd-gui</title><link>http://www.blogjava.net/pengpenglin/archive/2010/04/07/317622.html</link><dc:creator>Paul Lin</dc:creator><author>Paul Lin</author><pubDate>Wed, 07 Apr 2010 03:10:00 GMT</pubDate><guid>http://www.blogjava.net/pengpenglin/archive/2010/04/07/317622.html</guid><wfw:comment>http://www.blogjava.net/pengpenglin/comments/317622.html</wfw:comment><comments>http://www.blogjava.net/pengpenglin/archive/2010/04/07/317622.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pengpenglin/comments/commentRss/317622.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pengpenglin/services/trackbacks/317622.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这是一个基于C++写的Java源代码反编译工具，界面类似于EClipse，而且反编译的效果不错，出错率比较低。支持整个Jar包的反编译，支持界面拖放。速度很快，语法高亮显示！<br><br>而且这是一个绿色软件，不需要任何的安装，双击exe文件运行即可。卸载时只需要把exe和cfg文件删除即可。&nbsp;&nbsp;<a href='http://www.blogjava.net/pengpenglin/archive/2010/04/07/317622.html'>阅读全文</a><img src ="http://www.blogjava.net/pengpenglin/aggbug/317622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pengpenglin/" target="_blank">Paul Lin</a> 2010-04-07 11:10 <a href="http://www.blogjava.net/pengpenglin/archive/2010/04/07/317622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【摘自良葛格的笔记】Ant和JUnit结合进行自动测试入门</title><link>http://www.blogjava.net/pengpenglin/archive/2008/04/21/194519.html</link><dc:creator>Paul Lin</dc:creator><author>Paul Lin</author><pubDate>Mon, 21 Apr 2008 07:21:00 GMT</pubDate><guid>http://www.blogjava.net/pengpenglin/archive/2008/04/21/194519.html</guid><wfw:comment>http://www.blogjava.net/pengpenglin/comments/194519.html</wfw:comment><comments>http://www.blogjava.net/pengpenglin/archive/2008/04/21/194519.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pengpenglin/comments/commentRss/194519.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pengpenglin/services/trackbacks/194519.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: small; 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"><span style="font-family: Verdana"><span style="font-size: 10pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">project&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="autobuildtest"</span><span style="color: #ff0000">&nbsp;default</span><span style="color: #0000ff">="test"</span><span style="color: #0000ff">&gt;</span></span></span><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" 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">="setProperties"</span><span style="color: #0000ff">&gt;</span></span></span><span style="color: #000000"><br />
<span style="font-family: Verdana"><span style="font-size: 10pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="src.dir"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="src"</span><span style="color: #0000ff">/&gt;</span></span></span><span style="color: #000000"><br />
<span style="font-family: Verdana"><span style="font-size: 10pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="classes.dir"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="classes"</span><span style="color: #0000ff">/&gt;</span></span></span><span style="color: #000000"><br />
<span style="font-family: Verdana"><span style="font-size: 10pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span></span></span><span style="color: #000000"><br />
<span style="font-family: Verdana"><span style="font-size: 10pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #0000ff">&lt;</span><span style="color: #800000">target&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="prepareDir"</span><span style="color: #ff0000">&nbsp;depends</span><span style="color: #0000ff">="setProperties"</span><span style="color: #0000ff">&gt;</span></span></span><span style="color: #000000"><br />
<span style="font-family: Verdana"><span style="font-size: 10pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #0000ff">&lt;</span><span style="color: #800000">delete&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${classes.dir}"</span><span style="color: #0000ff">/&gt;</span></span></span><span style="color: #000000"><br />
<span style="font-family: Verdana"><span style="font-size: 10pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #0000ff">&lt;</span><span style="color: #800000">mkdir&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${classes.dir}"</span><span style="color: #0000ff">/&gt;</span></span></span><span style="color: #000000"><br />
<span style="font-family: Verdana"><span style="font-size: 10pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span></span></span><span style="color: #000000"><br />
<span style="font-family: Verdana"><span style="font-size: 10pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #0000ff">&lt;</span><span style="color: #800000">target&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="compile"</span><span style="color: #ff0000">&nbsp;depends</span><span style="color: #0000ff">="prepareDir"</span><span style="color: #0000ff">&gt;</span></span></span><span style="color: #000000"><br />
<span style="font-family: Verdana"><span style="font-size: 10pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #0000ff">&lt;</span><span style="color: #800000">javac&nbsp;</span><span style="color: #ff0000">srcdir</span><span style="color: #0000ff">="./src"</span><span style="color: #ff0000">&nbsp;destdir</span><span style="color: #0000ff">="${classes.dir}"</span><span style="color: #0000ff">/&gt;</span></span></span><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" 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</span><span style="color: #0000ff">&gt;</span></span></span><span style="color: #000000"><br />
<span style="font-family: Verdana"><span style="font-size: 10pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span><span style="font-family: Verdana"><span style="font-size: 10pt"><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: #ff0000">&nbsp;depends</span><span style="color: #0000ff">="compile"</span><span style="color: #0000ff">&gt;</span></span></span><span style="color: #000000"><br />
<span style="font-family: Verdana"><span style="font-size: 10pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #0000ff">&lt;</span><span style="color: #800000">junit&nbsp;</span><span style="color: #ff0000">printsummary</span><span style="color: #0000ff">="yes"</span><span style="color: #0000ff">&gt;</span></span></span><span style="color: #000000"><br />
<span style="font-family: Verdana"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="color: #0000ff"><span style="background-color: #00ff00"><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #0000ff">&lt;</span><span style="color: #800000">test&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="onlyfun.caterpillar.test.MathToolTest"</span><span style="color: #0000ff">/&gt;</span></span></span></span></span><span style="color: #000000"><br />
<span style="font-family: Verdana"><span style="font-size: 10pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span><span style="color: #0000ff"><span style="background-color: #00ff00"><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #0000ff">&lt;</span><span style="color: #800000">classpath</span><span style="color: #0000ff">&gt;</span></span></span><span style="color: #000000"><br />
</span></span></span><span style="color: #000000"><span style="font-family: Verdana"><span style="font-size: 10pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="background-color: #00ff00"><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #000000">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">pathelement&nbsp;</span><span style="color: #ff0000">location</span><span style="color: #0000ff">="${classes.dir}"</span><span style="color: #0000ff">/&gt;</span></span></span><span style="color: #000000"><br />
</span></span></span><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff"><span style="background-color: #00ff00"><span style="color: #0000ff">&lt;/</span><span style="color: #800000">classpath</span><span style="color: #0000ff">&gt;</span></span></span></span></span><span style="color: #000000"><br />
<span style="font-family: Verdana"><span style="font-size: 10pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #0000ff">&lt;/</span><span style="color: #800000">junit</span><span style="color: #0000ff">&gt;</span></span></span><span style="color: #000000"><br />
<span style="font-family: Verdana"><span style="font-size: 10pt"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span></span></span><span style="font-family: Verdana"><span style="font-size: 10pt"><span style="color: #000000">&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">project</span><span style="color: #0000ff">&gt;</span></span></span><span style="color: #000000"><span style="font-family: Verdana"><span style="font-size: 10pt">&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></span></span></div>
<br />
<span style="font-family: Verdana"><span style="font-family: Verdana"><span style="font-size: 10pt; font-family: ">上面XML文件高亮处描述了Ant如何与JUnit结合进行自动化测试，name属性是你要测试的TestCase，classpath元素指明了TestCase的路径，printsummary说明了要将测试的结果简单的显示出来。<br style="font-family: " />
</span></span><br />
<span style="font-size: 10pt; font-family: Verdana">如何吧JUnit测试的详细信息显示出来呢？我们可以采用&lt;formatter&gt;元素，如下所示：<br />
<br style="font-family: " />
</span>
<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"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">junit&nbsp;</span><span style="color: #ff0000">printsummary</span><span style="color: #0000ff">="yes"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff"><strong><font color="#ff0000">&lt;formatter type="plain" usefile="false"/&gt;</font></strong><br />
</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">test&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="onlyfun.caterpillar.test.MathToolTest"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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"  alt="" />&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">location</span><span style="color: #0000ff">="${classes.dir}"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">junit</span><span style="color: #0000ff">&gt;</span></div>
<br />
<span style="font-size: 10pt; font-family: Verdana">当usefile属性设定为true时，会自动帮您将产生的结果储存在档案中，预设是TEST-*.txt，其中*是您的测试案例类别名称。除此之外，我们也可用采用XML的格式来保存测试结果。如下所示：<br style="font-family: " />
<br style="font-family: " />
<strong style="color: red">&lt;formatter type="xml"/&gt;<br style="font-family: " />
</strong><br style="font-family: " />
也可以将测试结果所产生的XML文件转换为HTML文件，使用Ant可以直接帮您完成这个工作，&lt;junitreport&gt;标签使用 XSLT将XML文件转换为HTML文件<br style="font-family: " />
</span><br />
<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"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">project&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="autobuildtest"</span><span style="color: #ff0000">&nbsp;default</span><span style="color: #0000ff">="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"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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">="setProperties"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="src.dir"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="src"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="classes.dir"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="classes"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff"><span style="background-color: #00ff00"><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="report.dir"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="report"</span><span style="color: #0000ff">/&gt;</span></span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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">="prepareDir"</span><span style="color: #ff0000">&nbsp;depends</span><span style="color: #0000ff">="setProperties"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">delete&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${report.dir}"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">delete&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${classes.dir}"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mkdir&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${report.dir}"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mkdir&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${classes.dir}"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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">="compile"</span><span style="color: #ff0000">&nbsp;depends</span><span style="color: #0000ff">="prepareDir"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">javac&nbsp;</span><span style="color: #ff0000">srcdir</span><span style="color: #0000ff">="./src"</span><span style="color: #ff0000">&nbsp;destdir</span><span style="color: #0000ff">="${classes.dir}"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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: #ff0000">&nbsp;depends</span><span style="color: #0000ff">="compile"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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">printsummary</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"  alt="" />&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">="xml"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">test&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="onlyfun.caterpillar.test.MathToolTest"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="background-color: #00ff00"><span style="color: #ff0000">todir</span><span style="color: #0000ff">="${report.dir}"</span></span></span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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"  alt="" />&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">location</span><span style="color: #0000ff">="${classes.dir}"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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"  alt="" />&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"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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">="report"</span><span style="color: #ff0000">&nbsp;depends</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"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">junitreport&nbsp;</span><span style="color: #ff0000"><span style="background-color: #00ff00"><span style="color: #ff0000">todir</span><span style="color: #0000ff">="${report.dir}"</span></span></span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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">="${report.dir}"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff"><span style="background-color: #00ff00"><span style="color: #0000ff">&lt;</span><span style="color: #800000">include&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="TEST-*.xml"</span><span style="color: #0000ff">/&gt;</span></span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">fileset</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff"><span style="background-color: #00ff00"><span style="color: #0000ff">&lt;</span><span style="color: #800000">report&nbsp;</span><span style="color: #ff0000">format</span><span style="color: #0000ff">="frames"</span><span style="color: #ff0000">&nbsp;todir</span><span style="color: #0000ff">="${report.dir}/html"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span></span></span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">junitreport</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</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"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">project</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
<span style="font-size: 10pt; font-family: Verdana">上面的例子，首先定义了一个property，用于指向保存测试结果的目录，接着在&lt;test&gt;元素中通过&lt;todir&gt;将结果指向该目录。然后report目标首先在todir属性指定的目录下查找名称包含：TESTd的XML文件，找到之后通过XSL转换成带frame的HTML页面，存放到子目录html下面<br />
<br />
最终的结果可能如下：<br />
</span><br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/pengpenglin/Java工具/autoTest.jpg" border="0" /><br />
</span>
<img src ="http://www.blogjava.net/pengpenglin/aggbug/194519.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pengpenglin/" target="_blank">Paul Lin</a> 2008-04-21 15:21 <a href="http://www.blogjava.net/pengpenglin/archive/2008/04/21/194519.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ant中关于路径指定的两个Tips</title><link>http://www.blogjava.net/pengpenglin/archive/2008/04/21/194509.html</link><dc:creator>Paul Lin</dc:creator><author>Paul Lin</author><pubDate>Mon, 21 Apr 2008 06:28:00 GMT</pubDate><guid>http://www.blogjava.net/pengpenglin/archive/2008/04/21/194509.html</guid><wfw:comment>http://www.blogjava.net/pengpenglin/comments/194509.html</wfw:comment><comments>http://www.blogjava.net/pengpenglin/archive/2008/04/21/194509.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pengpenglin/comments/commentRss/194509.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pengpenglin/services/trackbacks/194509.html</trackback:ping><description><![CDATA[<p><span style="font-family: Verdana"><span style="font-size: 10pt">【1】path和location属性的区别：<br />
&nbsp;<br />
&lt;classpath&gt;<br />
&nbsp;&nbsp;&nbsp; <strong><span style="color: red"><strong>&lt;pathelement path="${classpath}"/&gt;</strong></span><br />
<span style="color: red">&nbsp;&nbsp;&nbsp;&nbsp; &lt;pathelement location="lib/helper.jar"/&gt;<br />
</span></strong>&lt;/classpath&gt;<br />
&nbsp;<br />
原文：The location attribute specifies a single file or directory relative to the project's base directory&nbsp;(or an absolute filename), while the path attribute accepts colon- or semicolon-separated lists of locations. The path attribute is intended to be used with predefined paths - in any other case, multiple<br />
elements with location attributes should be preferred.<br />
&nbsp;<br />
从中我们可以看出path可以用于指向存在多个文件的位置，而location只能指向单个的文件或目录。另外path可以被设定id，供其它的path或classpath引用。如：&lt;path id="main-classpath"&gt;，而classpath则没有</span></span></p>
<p><span style="font-family: Verdana"><span style="font-size: 10pt">【2】综合示例：<br />
In addition, DirSets, FileSets, and FileLists can be specified via nested &lt;dirset&gt;, &lt;fileset&gt;, and &lt;filelist&gt; elements, respectively. Note: The order in which the files building up a FileSet are added to the path-like structure is not defined.<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &lt;classpath&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<strong>pathelement path="${classpath}"/</strong>&gt;&nbsp; <strong style="color: red">方式① ：引用特定的变量</strong></span></span></p>
<p><span style="font-family: Verdana"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<strong>fileset dir="lib"</strong>&gt;&nbsp; <strong style="color: red">方式② ：指向特定的文件集</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="**/*.jar"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;</span></span></p>
<p><span style="font-family: Verdana"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<strong>pathelement location="classes"/</strong>&gt;&nbsp; <strong style="color: red">方式③：指向单个目录</strong></span></span></p>
<p><span style="font-family: Verdana"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<strong>dirset dir="${build.dir}"</strong>&gt;&nbsp; <strong style="color: red">方式④：指向特定目录集</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="apps/**/classes"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;exclude name="apps/**/*Test*"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/dirset&gt;</span></span></p>
<p><span style="font-family: Verdana"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<strong>filelist refid="third-party_jars"/</strong>&gt; <strong style="color: red">方式⑤：引用指定文件列表</strong><br />
&nbsp;&nbsp;&nbsp; &lt;/classpath&gt;<br />
&nbsp;<br />
This builds a path that holds the value of ${classpath}, followed by all jar files in the lib directory, the classes directory, all directories named classes under the apps subdirectory of ${build.dir}, except those that have the text Test in their name, and the files specified in the referenced FileList.</span></span></p>
 <img src ="http://www.blogjava.net/pengpenglin/aggbug/194509.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pengpenglin/" target="_blank">Paul Lin</a> 2008-04-21 14:28 <a href="http://www.blogjava.net/pengpenglin/archive/2008/04/21/194509.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Ant管理HSQLDB的小脚本</title><link>http://www.blogjava.net/pengpenglin/archive/2008/02/24/181841.html</link><dc:creator>Paul Lin</dc:creator><author>Paul Lin</author><pubDate>Sun, 24 Feb 2008 14:40:00 GMT</pubDate><guid>http://www.blogjava.net/pengpenglin/archive/2008/02/24/181841.html</guid><wfw:comment>http://www.blogjava.net/pengpenglin/comments/181841.html</wfw:comment><comments>http://www.blogjava.net/pengpenglin/archive/2008/02/24/181841.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/pengpenglin/comments/commentRss/181841.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pengpenglin/services/trackbacks/181841.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 使用Ant脚本来管理HSQLDB&nbsp;&nbsp;<a href='http://www.blogjava.net/pengpenglin/archive/2008/02/24/181841.html'>阅读全文</a><img src ="http://www.blogjava.net/pengpenglin/aggbug/181841.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pengpenglin/" target="_blank">Paul Lin</a> 2008-02-24 22:40 <a href="http://www.blogjava.net/pengpenglin/archive/2008/02/24/181841.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TDD与Junit的一点偶想</title><link>http://www.blogjava.net/pengpenglin/archive/2008/01/29/178335.html</link><dc:creator>Paul Lin</dc:creator><author>Paul Lin</author><pubDate>Tue, 29 Jan 2008 03:36:00 GMT</pubDate><guid>http://www.blogjava.net/pengpenglin/archive/2008/01/29/178335.html</guid><wfw:comment>http://www.blogjava.net/pengpenglin/comments/178335.html</wfw:comment><comments>http://www.blogjava.net/pengpenglin/archive/2008/01/29/178335.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/pengpenglin/comments/commentRss/178335.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pengpenglin/services/trackbacks/178335.html</trackback:ping><description><![CDATA[<p style="font-size: 10pt; font-family: Verdana">由于敏捷开发的流行，TDD的概念近年来在国内被炒得很火，似乎TDD是一个深不可测的东西。<br />
<br />
今天在看TDD的文章时，突然有了一个感觉：其实TDD的思想本来就很朴实，反而是我们开发人员一开始就背离了正确的路线和方法。<br />
<br />
众所周知，TDD鼓励人们在编写实际的实现代码之前，就先写好测试代码。这一点对大多数程序员来说难以接受，总觉得实现代码都没有写，怎么写测试代码啊。其实我觉得这主要是观念上的误区和行为的惯性所致。<br />
<br />
我们知道，开发商盖楼盘时都有一个建筑标准，而业主收楼时也有一个收楼标准。这些标准都是在实际的工程开工之前或业主正式入住之前就已经制定好的。正规的开发商会在建筑的过程中严格按照建筑标准来衡量自己的楼盘建设质量。看到有不符合要求的就马上改正。而不是事先不考虑任何的建筑或验收标准，等到整个楼盘盖好后再来。<br />
<br />
这个道理和TDD是一样的，在任何工作开始之前，我们都应该先明确制定工作交付的标准。这一点在需求分析文档中已经明确体现出来了。到了实际编码阶段却反而变成相反了。没有了事实的验收标准，就等于没有了目标，连自己要做成什么模样都不知道，才会出现在联调阶段出现众多的bug而导致返工的情况，另一方面由于没有了验收标准，开发人员经常会出现不知道接口如何设计的困惑。<br />
<br />
TDD就是要求我们在编码阶段先制定验收标准，再根据标准来开发。TDD的过程就是根据验收标准不断调整优化的过程，确保你始终沿着预定的目标前进，不会到最后变成一&#8220;豆腐渣工程&#8221;。<br />
<br />
同时为了符合测试程序的要求，您的单元必须设计得可以测试，这迫使您设计程序时，考虑到单元的低耦合。 <br />
<br />
<br />
很多时候技术的思想都很朴实，就像OOP那样，其实OOP本来就来自于日常生活，虽然说做了高层的抽象，但始终可以通过和现实的类比来看到其本质。</p>
 <img src ="http://www.blogjava.net/pengpenglin/aggbug/178335.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pengpenglin/" target="_blank">Paul Lin</a> 2008-01-29 11:36 <a href="http://www.blogjava.net/pengpenglin/archive/2008/01/29/178335.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>