??xml version="1.0" encoding="utf-8" standalone="yes"?>综合av第一页,蜜臀av国产精品久久久久,中文字幕久久久http://www.aygfsteel.com/ghawk/category/6026.htmlzh-cnTue, 27 Feb 2007 19:07:27 GMTTue, 27 Feb 2007 19:07:27 GMT60开?Java 试框架Q{Q?/title><link>http://www.aygfsteel.com/ghawk/archive/2006/01/10/27346.html</link><dc:creator>GHawk</dc:creator><author>GHawk</author><pubDate>Tue, 10 Jan 2006 02:41:00 GMT</pubDate><guid>http://www.aygfsteel.com/ghawk/archive/2006/01/10/27346.html</guid><wfw:comment>http://www.aygfsteel.com/ghawk/comments/27346.html</wfw:comment><comments>http://www.aygfsteel.com/ghawk/archive/2006/01/10/27346.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ghawk/comments/commentRss/27346.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ghawk/services/trackbacks/27346.html</trackback:ping><description><![CDATA[<span id="wmqeeuq" class=style7><span id="wmqeeuq" class=style7>from  <A >http://blog.csdn.net/wangyihust/archive/2006/01/02/568616.aspx</A> <div id="wmqeeuq" class=story> <H2><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0> <A ><FONT color=#003366>JUnit</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>JUnit是由 Erich Gamma ?Kent Beck ~写的一个回归测试框Ӟregression testing frameworkQ。Junit试是程序员试Q即所谓白盒测试,因ؓE序员知道被试的Y件如何(HowQ完成功能和完成什么样QWhatQ的功能。Junit是一套框Ӟl承TestCasec,可以用Junitq行自动试了?</P> <P><A ><FONT color=#003366>http://www.junit.org/</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>Cactus </FONT></A> <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>Cactus是一个基于JUnit框架的简单测试框Ӟ用来单元试服务端Java代码。Cactus框架的主要目标是能够单元试服务端的使用Servlet对象的JavaҎ如HttpServletRequest,HttpServletResponse,HttpSession{?/P> <P><A ><FONT color=#003366>http://jakarta.apache.org/cactus/</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>Abbot</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>Abbot是一个用来测试Java GUIs的框架。用单的ZXML的脚本或者Java代码Q你可以开始一个GUI?/P> <P><A ><FONT color=#003366>http://abbot.sourceforge.net/</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>JUnitPerf</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>Junitperf实际是junit的一个decoratorQ通过~写用于junitperf的单元测试,我们也可使测试过E自动化?/P> <P><A ><FONT color=#003366>http://www.clarkware.com/software/JUnitPerf.html</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>DbUnit</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>DbUnit是ؓ数据库驱动的目提供的一个对JUnit 的扩展,除了提供一些常用功能,它可以将你的数据库置于一个测试轮回之间的状态?</P> <P><A ><FONT color=#003366>http://dbunit.sourceforge.net/</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>Mockrunner</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>Mockrunner用在J2EE环境中进行应用程序的单元试。它不仅支持Struts actions, servletsQ过滤器和标{q包括一个JDBC和一个JMS试框架Q可以用于测试基于EJB的应用程序?/P> <P><A ><FONT color=#003366>http://mockrunner.sourceforge.net/index.html</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>DBMonster</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>DBMonster是一个用生成随机数据来测试SQL数据库的压力试工具?/P> <P><A ><FONT color=#003366>http://dbmonster.kernelpanic.pl/</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>MockEJB</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>MockEJB是一个不需要EJB容器pq行EJBq进行测试的轻量U框架?/P> <P><A ><FONT color=#003366>http://mockejb.sourceforge.net/</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>StrutsTestCase</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>StrutsTestCase 是Junit TestCasecȝ扩展Q提供基于Struts框架的代码测试。StrutsTestCase同时提供Mock 对象Ҏ和CactusҎ用来实际q行Struts ActionServletQ你可以通过q行servlet引擎来测试。因为StrutsTestCase使用ActionServlet控制器来试你的代码Q因此你不仅可以试Action对象的实玎ͼ而且可以试mappingsQfrom beans以及forwards声明。StrutsTestCase不启动servlet容器来测试struts应用E序Q容器外试Q也属于Mock对象试Q但是与EasyMock不同的是QEasyMock是提供了创徏Mock对象的APIQ而StrutsTest则是专门负责试Struts应用E序的Mock对象试框架?</P> <P><A ><FONT color=#003366>http://strutstestcase.sourceforge.net/</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>JFCUnit</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>JFCUnit使得你能够ؓJava偏移应用E序~写试例子。它Z用代码打开的窗口上获得句柄提供了支持;为在一个部件层ơ定位部件提供支持;为在部g中发起事Ӟ例如按一个按钮)以及以线E安全方式处理部件测试提供支持?/P> <P><A ><FONT color=#003366>http://jfcunit.sourceforge.net/</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>JTestCase</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>JTestCase 使用XML文g来组l多试案例数据Q声明条Ӟ操作和期望的l果Q,提供了一套易于用的Ҏ来检索XML中的试案例Q按照数据文件的定义来声明结果?/P> <P><A ><FONT color=#003366>http://jtestcase.sourceforge.net/</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>SQLUnit</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>SQLUnit是一个单元测试框Ӟ用于Ҏ据库存储q程q行回归试。用 Java/JUnit/XML开发?</P> <P><A ><FONT color=#003366>http://sqlunit.sourceforge.net</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>JTR</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>JTR (Java Test Runner)是一个开源的Z反{控制(IOC)的J2EE试框架。它允许你构建复杂的J2EE试套g(Test Suites)q连到应用服务器执行试,可以包括多个试实例。JTR的licensed是GPL协议?/P> <P><A ><FONT color=#003366>http://jtrunner.sourceforge.net/</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>Marathon</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>Marathon是一个针对用Java/Swing开发GUI应用E序的测试框Ӟ它由recorder, runner ?editorl成Q测试脚本是python代码。Marathon的焦Ҏ攑֜最l用L试上?/P> <P><A ><FONT color=#003366>http://marathonman.sourceforge.net</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>TestNG</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>TestNG是根据JUnit ?NUnit思想而构建的一个测试框Ӟ但是TestNG增加了许多新的功能得它变得更加强大与容易用比如:<BR>*支持JSR 175注释QJDK 1.4利用JavaDoc注释同样也支持)<BR>*灉|的Test配置<BR>*支持默认的runtime和logging JDK功能<BR>*强大的执行模型(不再TestSuiteQ?BR>*支持独立的测试方法?/P> <P><A ><FONT color=#003366>http://testng.org/</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>Surrogate Test framework</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>Surrogate Test framework是一个值得U赞单元试框架Q特别适合于大型,复杂Javapȝ的单元测试。这个框架能与JUnit,MockEJB和各U支持模拟对象(mock object Q的试工具无缝l合。这个框架基于AspectJ技术? <P><A ><FONT color=#003366>http://surrogate.sourceforge.net</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>MockCreator</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>MockCreator可以为给定的interface或class生成模拟对象QMock objectQ的源码?/P> <P><A ><FONT color=#003366>http://mockcreator.sourceforge.net/</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>jMock</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>jMock利用mock objects思想来对Java codeq行试。jMockh以下特点:Ҏ扩展Q让你快速简单地定义mock objects,因此不必打破E序间的兌Q让你定义灵zȝ越对象之间交互作用而带来测试局限,减少你测试地脆弱性?/P> <P><A ><FONT color=#003366>http://www.jmock.org/</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>EasyMock</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>EasyMock为Mock Objects提供接口q在JUnit试中利用Java的proxy设计模式生成它们的实例。EasyMock最适合于测试驱动开发?/P> <P><A ><FONT color=#003366>http://www.easymock.org/</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>The Grinder</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>The Grinder是一个负载测试框架。在BSD开源协议下免费使用?/P> <P><A ><FONT color=#003366>http://grinder.sourceforge.net/</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>XMLUnit</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>XMLUnit不仅有Java版本的还?Net版本的。Java开发的XMLUnit提供了两个JUnit 扩展cXMLAssert和XMLTestCase,和一l支持的cR这些类可以用来比较两张XML之间的不同之处,展示XML利用XSLT?校验XML,求得XPath表达式在XML中的?遍历XML中的某一节点利DOM展开?/P> <P><A ><FONT color=#003366>http://xmlunit.sourceforge.net/</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>Jameleon</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>Jameleon一个自动化试工具。它被用来测试各U各L应用E序Q所以它被设计成插g模式。ؓ了整个试q程变得单Jameleon提供了一个GUI,因此Jameleon实现了一个Swing 插g?/P> <P><A ><FONT color=#003366>http://jameleon.sourceforge.net/index.html</FONT></A></P></DIV> <div id="wmqeeuq" class=story> <H2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>J2MEUnit</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P>J2MEUnit是应用在J2ME应用E序的一个单元测试框架。它ZJUnit?/P> <P><A ><FONT color=#003366>http://j2meunit.sourceforge.net/</FONT></A></P></DIV> <H2 class=story><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> <A ><FONT color=#003366>Jetif</FONT></A>  <span id="wmqeeuq" class=NavigationColor> </SPAN></H2> <P class=story><span id="wmqeeuq" class=NavigationColor></SPAN><FONT size=3>Jetif是一个用UJava实现的回归测试框架。它为JavaE序单元试以及功能试提供了一个简单而且?伸羃的架构,可以用于个h开发或企业U开发的试。它Ҏ使用Q功能强大,而且拥有一些企业񔋹试的重要功能。Jetif来源于JUnit, JTestCase以及TestNG的启发,有几个基本的概念直接来自于JUnitQ?比如说断a机制QTest Listener的概念,因此从JUnit转到Jetif是非常容易的?/FONT></P> <P class=story><A ><FONT color=#003366>http://jetif.sourceforge.net/</FONT></A></P> <H2 class=story><FONT size=2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> </FONT><A ><FONT color=#003366>GroboUtils</FONT></A><FONT size=2>  <span id="wmqeeuq" class=NavigationColor> </SPAN></FONT></H2> <P class=story><span id="wmqeeuq" class=NavigationColor></SPAN><FONT size=3>GroboUtils使得扩展Java试变得可能。它包括用在Java不同斚w试的多个子目。在GroboUtils中最常被到的工具?多线E测?multi-threaded tests),整体单元试(hierarchial unit tests),代码覆盖工具(code coverage tool)?/FONT></P> <P class=story><A ><FONT color=#003366>http://groboutils.sourceforge.net/</FONT></A></P> <H2 class=story><FONT size=2><FONT color=#003366><IMG onmousewheel="return bbimg(this)" title=点击新窗口查看大?height=14 alt="" src="http://www.open-open.com/image/item.gif" width=13 onload="java_script_:if(this.width>600)this.width=600" border=0></FONT> </FONT><A ><FONT color=#003366>Testare</FONT></A><FONT size=2>  <span id="wmqeeuq" class=NavigationColor> </SPAN></FONT></H2> <P class=story><span id="wmqeeuq" class=NavigationColor></SPAN><FONT size=3>TESTARE是用来简化分布式应用E序(比如:在SERVLETS,JMS listeners, CORBA ORBs或RMI环境?试开发过E的一个测试框架?/FONT></P> <P class=story><A ><FONT color=#003366>https://testare.dev.java.net/</FONT></A></P></SPAN></SPAN><img src ="http://www.aygfsteel.com/ghawk/aggbug/27346.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ghawk/" target="_blank">GHawk</a> 2006-01-10 10:41 <a href="http://www.aygfsteel.com/ghawk/archive/2006/01/10/27346.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>?Cobertura 量试覆盖?/title><link>http://www.aygfsteel.com/ghawk/archive/2005/12/17/24331.html</link><dc:creator>GHawk</dc:creator><author>GHawk</author><pubDate>Sat, 17 Dec 2005 03:23:00 GMT</pubDate><guid>http://www.aygfsteel.com/ghawk/archive/2005/12/17/24331.html</guid><wfw:comment>http://www.aygfsteel.com/ghawk/comments/24331.html</wfw:comment><comments>http://www.aygfsteel.com/ghawk/archive/2005/12/17/24331.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ghawk/comments/commentRss/24331.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ghawk/services/trackbacks/24331.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0> <TBODY> <TR vAlign=top> <TD width="100%"> <H1><A ><FONT size=3>http://www-128.ibm.com/developerworks/cn/java/j-cobertura/</FONT></A></H1> <H1>?Cobertura 量试覆盖?/H1> <P id=subtitle>扑և隐藏 bug 的未试到的代码</P><IMG class=display-img height=6 alt="" src="http://www.ibm.com/i/c.gif" width=1></TD> <TD class=no-print width=192><IMG height=18 alt=developerWorks src="http://www-128.ibm.com/developerworks/i/dw.gif" width=192></TD></TR></TBODY></TABLE> <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0> <TBODY> <TR vAlign=top> <TD width=10><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=10></TD> <TD width="100%"> <TABLE class=no-print cellSpacing=0 cellPadding=0 width=160 align=right border=0> <TBODY> <TR> <TD width=10><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=10></TD> <TD> <TABLE cellSpacing=0 cellPadding=0 width=150 border=0> <TBODY> <TR> <TD class=v14-header-1-small>文档选项</TD></TR></TBODY></TABLE> <TABLE class=v14-gray-table-border cellSpacing=0 cellPadding=0 border=0> <TBODY> <TR> <TD class=no-padding width=150> <TABLE cellSpacing=0 cellPadding=0 width=143 border=0><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=8> <FORM name=email action=https://www-130.ibm.com/developerworks/secure/email-it.jsp><INPUT type=hidden value="Cobertura 是一U开源工P它通过基本的代码Qƈ观察在测试包q行时执行了哪些代码和没有执行哪些代码,来测量测试覆盖率。除了找出未试到的代码q发?bug 外,Cobertura q可以通过标记无用的、执行不到的代码来优化代码,q可以提?API 实际操作的内部信息。Elliotte Rusty Harold 与您分享如何利用代码覆盖率的最佛_跉|使用 Cobertura? name=body><INPUT type=hidden value="?Cobertura 量试覆盖? name=subject><INPUT type=hidden value=cn name=lang> <SCRIPT language=JavaScript type=text/javascript> <!-- document.write('<tr valign="top"><td width="8"><img src="http://www.ibm.com/i/c.gif" width="8" height="1" alt=""/></td><td width="16"><img src="http://www.ibm.com/i/v14/icons/em.gif" height="16" width="16" vspace="3" alt="此作为电子邮件发? /></td><td width="122"><p><a class="smallplainlink" href="javascript:document.email.submit();"><b>此作为电子邮件发?/b></a></p></td></tr>'); //--> </SCRIPT> <TBODY> <TR vAlign=top> <TD width=8><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=8></TD> <TD width=16><IMG height=16 alt=此作为电子邮件发?src="http://www.ibm.com/i/v14/icons/em.gif" width=16 vspace=3></TD> <TD width=122> <P><A class=smallplainlink href="javascript:document.email.submit();"><B><FONT color=#5c81a7 size=2>此作为电子邮件发?/FONT></B></A></P></TD></TR><NOSCRIPT><tr valign="top"><td width="8"><img alt="" height="1" width="8" src="http://www.ibm.com/i/c.gif"/></td><td width="16"><img alt="" width="16" height="16" src="http://www.ibm.com/i/c.gif"/></td><td class="small" width="122"><p><span id="wmqeeuq" class="ast">未显C需?JavaScript 的文档选项</span></p></td></tr></NOSCRIPT></FORM></TBODY></TABLE></TD></TR></TBODY></TABLE><BR> <TABLE cellSpacing=0 cellPadding=0 width=150 border=0> <TBODY> <TR> <TD class=v14-header-1-small>Ҏ늚评h</TD></TR></TBODY></TABLE> <TABLE class=v14-gray-table-border cellSpacing=0 cellPadding=0 border=0> <TBODY> <TR> <TD class=no-padding width=150> <TABLE cellSpacing=0 cellPadding=0 width=143 border=0> <TBODY> <TR vAlign=top> <TD width=8><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=8></TD> <TD><IMG height=16 alt="" src="http://www.ibm.com/i/v14/icons/d_bold.gif" width=16 vspace=3 border=0></TD> <TD width=125> <P><A class=smallplainlink ><B><FONT color=#996699 size=2>帮助我们改进q些内容</FONT></B></A></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR></TD></TR></TBODY></TABLE> <P>U别: 初</P> <P><A ><FONT color=#996699>Elliotte Rusty Harold</FONT></A>, 副教? Polytechnic University<BR></P> <P>2005 q?5 ?26 ?/P> <BLOCKQUOTE>Cobertura 是一U开源工P它通过基本的代码Qƈ观察在测试包q行时执行了哪些代码和没有执行哪些代码,来测量测试覆盖率。除了找出未试到的代码q发?bug 外,Cobertura q可以通过标记无用的、执行不到的代码来优化代码,q可以提?API 实际操作的内部信息。Elliotte Rusty Harold 与您分享如何利用代码覆盖率的最佛_跉|使用 Cobertura?/BLOCKQUOTE> <P>管试先行~程Qtest-first programmingQ和单元试已不能算是新概念Q但试驱动的开发仍然是q去 10 q中最重要的编E创新。最好的一些编Eh员在q去半个世纪中一直在使用q些技术,不过Q只是在最q几q_q些技术才被广泛地视ؓ在时间及成本预算内开发健壮的无缺陯Y件的关键所在。但是,试驱动的开发不能超q测试所能达到的E度。测试改q了代码质量Q但q也只是针对实际试到的那部分代码而言的。您需要有一个工具告诉您E序的哪些部分没有测试到Q这样就可以针对q些部分~写试代码q找出更?bug?</P> <P>Mark Doliner ?Cobertura Q?I>cobertura</I> 在西班牙语是覆盖的意思)是完成这Q务的一个免?GPL 工具。Cobertura 通过用额外的语句记录在执行测试包Ӟ哪些行被试到、哪些行没有被测试到Q通过q种方式来度量字节码Q以便对试q行监视。然后它生成一?HTML 或?XML 格式的报告,指出代码中的哪些包、哪些类、哪些方法和哪些行没有测试到。可以针对这些特定的区域~写更多的测试代码,以发现所有隐藏的 bug?</P> <P><A name=N10074><span id="wmqeeuq" class=atitle><FONT face=Arial size=4>阅读 Cobertura 输出</FONT></SPAN></A></P> <P>我们首先查看生成?Cobertura 输出。图 1 昄了对 Jaxen 试包运?Cobertura 生成的报告(请参?<A ><FONT color=#996699>参考资?/FONT></A>Q。从该报告中Q可以看C很好Q在 <CODE>org.jaxen.expr.iter</CODE> 包中几乎?100%Q到极差Q在 <CODE>org.jaxen.dom.html</CODE> 中完全没有覆盖)的覆盖率l果?/P><BR><A name=N1008B><B>?1. Jaxen 的包U别覆盖率统计数?/B></A><BR><IMG height=490 alt="" hspace=5 src="http://www-128.ibm.com/developerworks/cn/java/j-cobertura/overview.jpg" width=676 vspace=5 border=0> <BR> <P>Cobertura 通过被测试的行数和被试的分支数来计覆盖率。第一ơ测试时Q两U测试方法之间的差别q不是很重要。Cobertura qؓc计^?McCabe 复杂度(请参?<A ><FONT color=#996699>参考资?/FONT></A>Q?/P> <P>可以深入挖掘 HTML 报告Q了解特定包或者类的覆盖率。图 2 昄?<CODE>org.jaxen.function</CODE> 包的覆盖率统计。在q个包中Q覆盖率的范围从 <CODE>SumFunction</CODE> cȝ 100% ?<CODE>IdFunction</CODE> cȝ仅ؓ 5%?/P><BR><A name=N100B5><B>?2. org.jaxen.function 包中的代码覆盖率</B></A><BR><IMG height=490 alt="" hspace=5 src="http://www-128.ibm.com/developerworks/cn/java/j-cobertura/package.jpg" width=676 vspace=5 border=0> <BR> <P>q一步深入到单独的类中,具体查看哪一行代码没有测试到。图 3 昄?<CODE>NameFunction</CODE> cM的部分覆盖率。最左边一栏显C受后一栏显CZ执行试时这一行被执行的次数。可以看出,W?112 行被执行?100 ơ,W?114 行被执行?28 ơ。用U色H出昄的那些行则根本没有测试到。这个报告表明,虽然从M上说该方法被试CQ但实际上还有许多分支没有测试到?</P><BR><A name=N100D0><B>?3. NameFunction cM的代码覆盖率</B></A><BR><IMG height=590 alt="" hspace=5 src="http://www-128.ibm.com/developerworks/cn/java/j-cobertura/class.jpg" width=676 vspace=5 border=0> <BR> <TABLE cellSpacing=0 cellPadding=0 width="40%" align=right border=0> <TBODY> <TR> <TD width=10><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=10></TD> <TD> <TABLE cellSpacing=0 cellPadding=5 width="100%" border=1> <TBODY> <TR> <TD bgColor=#eeeeee> <P>Cobertura ?jcoverage 的分支(请参?<A ><FONT color=#996699>参考资?/FONT></A>Q。GPL 版本?jcoverage 已经有一q没有更新过了,q且有一些长期存在的 bugQCobertura 修复了这?bug。原来的那些 jcoverage 开发h员不再l开发开放源码,他们转向开?jcoverage 的商业版?jcoverage+Qjcoverage+ 是一个从同一代码基础中发展出来的闭源代码品。开放源码的奇妙之处在于Q一个品不会因为原开发h员决定让他们的工作获得相应的报酬而消亡?</P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE> <P><A name=N100EC><span id="wmqeeuq" class=smalltitle><STRONG><FONT face=Arial>认遗漏的测?/FONT></STRONG></SPAN></A></P> <P>利用 Cobertura 报告Q可以找Z码中未测试的部分q对它们编写测试。例如,?3 昄 Jaxen 需要进行一些测试,q用 <CODE>name()</CODE> 函数Ҏ字节炏V注释节炏V处理指令节炏V属性节点和名称I间节点q行试?</P> <P>如果有许多未覆盖的代码,?Cobertura 在这里报告的那样Q那么添加所有缺的试会非常耗时Q但也是值得的。不一定要一ơ完成它。您可以从被试的最的代码开始,比如那些所有没有覆盖的包。在试所有的包之后,可以对每一个显CZؓ没有覆盖的类~写一些测试代码。对所有类q行专门试后,q要为所有未覆盖的方法编写测试代码。在试所有方法之后,可以开始分析对未测试的语句q行试的必要性?</P> <P><A name=N100FC><span id="wmqeeuq" class=smalltitle><STRONG><FONT face=Arial>Q几乎)不留下Q何未试的代?/FONT></STRONG></SPAN></A></P> <P>是否有一些可以测试但不应试的内容?q取决于您问的是谁。在 JUnit FAQ 中,J. B. Rainsberger 写到“一般的看法是:如果 <I>自n</I> 不会出问题,那么它会因ؓ太简单而不会出问题。第一个例子是 <CODE>getX()</CODE> Ҏ。假?<CODE>getX()</CODE> Ҏ只提供某一实例变量的倹{在q种情况下,除非~译器或者解释器Z问题Q否?<CODE>getX()</CODE> 是不会出问题的。因此,不用试 <CODE>getX()</CODE>Q测试它不会带来M好处。对?<CODE>setX()</CODE> Ҏ来说也是如此Q不q,如果 <CODE>setX()</CODE> Ҏ实要进行Q何参数验证,或者说实有副作用Q那么还是有必要对其q行试。?</P> <TABLE cellSpacing=0 cellPadding=0 width="40%" align=right border=0> <TBODY> <TR> <TD width=10><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=10></TD> <TD> <TABLE cellSpacing=0 cellPadding=5 width="100%" border=1> <TBODY> <TR> <TD bgColor=#eeeeee> <P>理论上,Ҏ覆盖的代码编写测试代码不一定就会发?bug。但在实践中Q我从来没有到没有发现 bug 的情c未试的代码充满了 bug。所做的试少Q在代码中隐藏的、未发现?bug ׃多?/P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE> <P>我不同意。我已经C清在“简单得不会出问题”的代码中发现的 bug 的数量了。确实,一?getter ?setter 很简单,不可能出问题。但是我从来没有办法区分哪些方法是真的单得不会出错Q哪些方法只是看上去如此。编写覆盖像 setter ?getter q样单方法的试代码q不难。ؓ此所q量旉会因为在q些Ҏ中发现未N料到?bug 而得到补ѝ?</P> <P>一般来_开始测量后Q达?90% 的测试覆盖率是很Ҏ的。将覆盖率提高到 95% 或者更高就需要动一下脑{。例如,可能需要装载不同版本的支持库,以测试没有在所有版本的库中出现?bug。或者需要重新构Z码,以便试通常执行不到的部分代码。可以对c进行扩展,让它们的受保护方法变为公共方法,q样可以对q些Ҏq行试。这些技巧看h像是多此一举,但是它们曑ָ助我在一半的旉内发现更多的未发现的 bug?</P> <P>q不L可以得到完美的?00% 的代码覆盖率。有时您会发玎ͼ不管对代码如何改造,仍然有一些行、方法、甚x整个cL试不到的。下面是您可能会遇到的挑战的一些例子: </P> <UL> <LI>只在特定q_上执行的代码。例如,在一个设计良好的 GUI 应用E序中,d一?Exit 菜单的代码可以?Windows PC 上运行,但它不能?Mac Zq行?BR><BR> <LI>捕获不会发生的异常的 <CODE>catch</CODE> 语句Q比如在?<CODE>ByteArrayInputStream</CODE> q行d操作时抛出的 <CODE>IOException</CODE>?BR><BR> <LI>非公q中的一些方法,它们永远也不会被实际调用Q只是ؓ了满x个接口契U而必d现?BR><BR> <LI>处理虚拟?bug 的代码块Q比如说Q不能识?UTF-8 ~码?<BR><BR></LI></UL> <P>考虑C面这些以及类似的情况Q我认ؓ一些极限程序员自动删除所有未试代码的做法是不切实际的,q且可能h一定的讽刺性。不能L获得l对完美的测试覆盖率q不意味着׃会有更好的覆盖率?</P> <P>然而,比执行不到的语句和方法更常见的是D留代码Q它不再有Q何作用,q且从代码基中去掉这些代码也不会产生M影响。有时可以通过使用反射来访问私有成员这L怪招来测试未试的代码。还可以为未试的、包保护Qpackage-protectedQ的代码来编写测试代码,测试类攑ֈ要试的类所在那个包中。但最好不要这样做。所有不能通过发布的(公共的和受保护的Q接口访问的代码都应删除。执行不到的代码不应当成Z码基的一部分。代码基小Q它pҎ被理解和l护?</P> <TABLE cellSpacing=0 cellPadding=0 width="40%" align=right border=0> <TBODY> <TR> <TD width=10><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=10></TD> <TD> <TABLE cellSpacing=0 cellPadding=5 width="100%" border=1> <TBODY> <TR> <TD bgColor=#eeeeee> <P>不要漏掉量单元试包和cLw。我不止一ơ注意到Q某些个试Ҏ或者类没有被测试包真正q行。通常q表明名U规范中存在问题Q比如将一个方法命名ؓ <CODE><I>tes</I>SomeReallyComplexCondition</CODE>Q而不是将其命名ؓ <CODE><I>test</I>SomeReallyComplexCondition</CODE>Q,或者忘记将一个类dC <CODE>suite()</CODE> Ҏ中。在其他情况下,未预期的条gD跌了测试方法中的代码。不是什么情况,都是虽然已经~写了测试代码,但没有真正运行它。JUnit 不会告诉您它没有像您所想的那样q行所有测试,但是 Cobertura 会告诉您。找Z未运行的试后,Ҏ它一般很Ҏ?</P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR> <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0> <TBODY> <TR> <TD><IMG height=1 alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%"></TD></TR></TBODY></TABLE> <TABLE class=no-print cellSpacing=0 cellPadding=0 align=right> <TBODY> <TR align=right> <TD> <TABLE cellSpacing=0 cellPadding=0 border=0> <TBODY> <TR> <TD vAlign=center><IMG height=16 alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width=16 border=0><BR></TD> <TD vAlign=top align=right><A class=fbox ><B><FONT color=#996699>回页?/FONT></B></A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR><BR> <P><A name=N10178><span id="wmqeeuq" class=atitle><FONT face=Arial size=4>q行 Cobertura</FONT></SPAN></A></P> <P>在了解了量代码覆盖率的好处后,让我们再来讨Z下如何用 Cobertura 量代码覆盖率的具体l节。Cobertura 被设计成为在 Ant 中运行。现在还没有q方面的 IDE 插g可用Q不q一两年内也许就会有了?</P> <P>首先需要在 build.xml 文g中添加一个Q务定义。以下这个顶U?<CODE>taskdef</CODE> 元素?cobertura.jar 文g限定在当前工作目录中Q?</P> <TABLE cellSpacing=0 cellPadding=5 width="65%" bgColor=#cccccc border=1> <TBODY> <TR> <TD><PRE><CODE class=section><FONT face="Lucida Console"><taskdef classpath="cobertura.jar" resource="tasks.properties" /></FONT></CODE></PRE></TD></TR></TBODY></TABLE><BR> <P>然后Q需要一?<CODE>cobertura-instrument</CODE> dQ该d在已经~译好的cL件中d日志代码?CODE>todir</CODE> 属性指定将量cLC么地斏V?CODE>fileset</CODE> 子元素指定测量哪?.class 文gQ?</P> <TABLE cellSpacing=0 cellPadding=5 width="65%" bgColor=#cccccc border=1> <TBODY> <TR> <TD><PRE><CODE class=section><FONT face="Lucida Console"><target name="instrument"> <cobertura-instrument todir="target/instrumented-classes"> <fileset dir="target/classes"> <include name="**/*.class"/> </fileset> </cobertura-instrument> </target></FONT></CODE></PRE></TD></TR></TBODY></TABLE><BR> <P>用通常q行试包的同一U类型的 Ant dq行试。惟一的区别在于:被测量的cdd原始cd现在c\径中之前出现在类路径中,而且需要将 Cobertura JAR 文gd到类路径中: </P> <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#eeeeee border=1> <TBODY> <TR> <TD><PRE><CODE class=section><FONT face="Lucida Console"><target name="cover-test" depends="instrument"> <mkdir dir="${testreportdir}" /> <junit dir="./" failureproperty="test.failure" printSummary="yes" fork="true" haltonerror="true"> <!-- Normally you can create this task by copying your existing JUnit target, changing its name, and adding these next two lines. You may need to change the locations to point to wherever you've put the cobertura.jar file and the instrumented classes. --> <classpath location="cobertura.jar"/> <classpath location="target/instrumented-classes"/> <classpath> <fileset dir="${libdir}"> <include name="*.jar" /> </fileset> <pathelement path="${testclassesdir}" /> <pathelement path="${classesdir}" /> </classpath> <batchtest todir="${testreportdir}"> <fileset dir="src/java/test"> <include name="**/*Test.java" /> <include name="org/jaxen/javabean/*Test.java" /> </fileset> </batchtest> </junit> </target>></FONT></CODE></PRE></TD></TR></TBODY></TABLE><BR> <P>Jaxen 目使用 JUnit 作ؓ其测试框Ӟ但是 Cobertura 是不受框架媄响的。它?TestNG、Artima SuiteRunner、HTTPUni 或者在您自己在C室开发的pȝ中一样工作得很好?/P> <P>最后,<CODE>cobertura-report</CODE> d生成本文开始部分看到的那个 HTML 文gQ?</P> <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#eeeeee border=1> <TBODY> <TR> <TD><PRE><CODE class=section><FONT face="Lucida Console"><target name="coverage-report" depends="cover-test"> <cobertura-report srcdir="src/java/main" destdir="cobertura"/> </target></FONT></CODE></PRE></TD></TR></TBODY></TABLE><BR> <P><CODE>srcdir</CODE> 属性指定原始的 .java 源代码在什么地斏V?CODE>destdir</CODE> 属性指?Cobertura 攄输出 HTML 的那个目录的名称?/P> <P>在自q Ant ~译文g中加入了cM的Q务后Q就可以通过键入以下命o来生成一个覆盖报告: </P> <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#eeeeee border=1> <TBODY> <TR> <TD><PRE><CODE class=section><FONT face="Lucida Console">% ant instrument % ant cover-test % ant coverage-report</FONT></CODE></PRE></TD></TR></TBODY></TABLE><BR> <P>当然Q如果您愿意的话Q还可以改变目标d的名Uͼ或者将q三Q务合qؓ一个目标Q务?</P><BR> <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0> <TBODY> <TR> <TD><IMG height=1 alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%"></TD></TR></TBODY></TABLE> <TABLE class=no-print cellSpacing=0 cellPadding=0 align=right> <TBODY> <TR align=right> <TD> <TABLE cellSpacing=0 cellPadding=0 border=0> <TBODY> <TR> <TD vAlign=center><IMG height=16 alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width=16 border=0><BR></TD> <TD vAlign=top align=right><A class=fbox ><B><FONT color=#996699>回页?/FONT></B></A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR><BR> <P><A name=N101CE><span id="wmqeeuq" class=atitle><FONT face=Arial size=4>l束?/FONT></SPAN></A></P> <P>Cobertura 是敏L序员工具׃新增的一个重要工兗通过生成代码覆盖率的具体数|Cobertura 单元测试从一U艺术{变ؓ一门科学。它可以L试覆盖中的I隙Q直接找?bug。测量代码覆盖率使您可以获得Lq修?bug 所需的信息,从而开发出Ҏ个h来说都更健壮的Y件?</P><BR> <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0> <TBODY> <TR> <TD><IMG height=1 alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%"></TD></TR></TBODY></TABLE> <TABLE class=no-print cellSpacing=0 cellPadding=0 align=right> <TBODY> <TR align=right> <TD> <TABLE cellSpacing=0 cellPadding=0 border=0> <TBODY> <TR> <TD vAlign=center><IMG height=16 alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width=16 border=0><BR></TD> <TD vAlign=top align=right><A class=fbox ><B><FONT color=#996699>回页?/FONT></B></A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR><BR> <P><A name=resources><span id="wmqeeuq" class=atitle><FONT face=Arial size=4>参考资?</FONT></SPAN></A></P> <UL> <LI>您可以参阅本文在 developerWorks 全球站点上的 <A target=_blank><FONT color=#5c81a7>英文原文</FONT></A>?BR><BR> <LI>?SourceForge 下蝲 <A ><FONT color=#5c81a7>Cobertura</FONT></A>?BR><BR> <LI>获得 <A ><FONT color=#5c81a7>JUnit</FONT></A> <A ><FONT color=#5c81a7>受媄响的试</FONT></A>Q它是用?Java q_的实际标准单元测试框架?BR><BR> <LI>阅读 Dave Thomas ?Andy Hunt 合著?<A ><FONT color=#5c81a7><I>Pragmatic Unit Testing in Java With JUnit</I> </FONT></A>QPragmatic BookshelfQ?003Q?BR><BR> <LI>Cenqua ?<A ><FONT color=#5c81a7>Clover</FONT></A> 是一个更_致的、收费的试覆盖率工P它所做的工作实质上与 Cobertura 相同Q只是它做得更细致一些?BR><BR> <LI>IBM Rational 提供了全面的试工具包来帮助您检代码。?A ><FONT color=#5c81a7>Get started with automated testing: Road map to success</FONT></A>”ؓ您提供了卛_开始测试自q代码所需的基知识?<BR><BR> <LI>Mike Kelly 提供了?A ><FONT color=#5c81a7>using TestManager to report test coverage</FONT></A>”的l节QdeveloperWorksQ?003 q?12 月)?BR><BR> <LI><A ><FONT color=#5c81a7>PureCoverage</FONT></A> ?IBM Rational PurifyPlus 试工具包的一部分Q它是一个出色的代码覆盖率工兗Rational Application Developor 包括 PureCoverage 功能Q从?A ><FONT color=#5c81a7>使用 IBM Rational Application Developer for WebSphere Software q行lg试</FONT></A>”中可以了解关于它的更多知识QdeveloperWorksQ?005 q?3 月)?BR><BR> <LI>Cobertura ?<A ><FONT color=#5c81a7>jcoverage</FONT></A> 的分支?<BR><BR> <LI>Carnegie Mellon ?Software Engineering Institute 发表了对 <A ><FONT color=#5c81a7>McCabe's Cyclomatic Complexity</FONT></A> 的详l说明?BR><BR> <LI>David Carew ?Sandeep Desai 合著??A ><FONT color=#5c81a7>Keeping critters out of your code: How to use WebSphere and JUnit to prevent programming bugs</FONT></A>”(developerWorksQ?003 q?6 月) 分析了如何用 XP Ҏq行试?BR><BR> <LI>Dennis M. Sosnoski <A ><FONT color=#5c81a7>推出</FONT></A> ?<A ><FONT color=#5c81a7>Classworking 工具?/FONT></A> pdQ探讨开源的 <A ><FONT color=#5c81a7>Hansel</FONT></A> ?<A ><FONT color=#5c81a7>Gretel</FONT></A> 代码覆盖率工兗?BR><BR> <LI>参阅?A ><FONT color=#5c81a7>Test your tests with Jester</FONT></A>”,了解关于开放源代码 JUnit 试试器的知识?BR><BR> <LI>Malcolm Davis 撰写的?A ><FONT color=#5c81a7>利用 Ant ?JUnit q行增量开?/FONT></A>”(developerWorksQ?000 q?11 月)介绍了如何将 JUnit 集成到自q目中?BR><BR> <LI>Eric Allen ?Roy Miller 在他们各自的专栏 <A ><FONT color=#5c81a7>诊断 Java 代码</FONT></A> ?<A ><FONT color=#5c81a7>Demystifying Extreme Programming</FONT></A> 中经常讨论到单元试?BR><BR> <LI>Erik Hatcher ?<A ><FONT color=#5c81a7>让编译和试q程自动?/FONT></A> QdeveloperWorksQ?001 q?8 月)展示了如何将增量试和连l编译结合到一个自动过E中?BR><BR> <LI>探烦 <A ><FONT color=#5c81a7>FoCuS</FONT></A>Q这?IBM alphaWorks 的一个工P它实C功能覆盖ҎQƈ通过提供未测试区域的详细覆盖率信息来改进应用E序试?BR><BR> <LI>作ؓ本文分析对象?<A ><FONT color=#5c81a7>Jaxen 目</FONT></A> 是一个用?Java ~程的开?XPath 引擎Q适合多种不同对象模型?<BR><BR> <LI>?developerWorks ?<A ><FONT color=#5c81a7>Java 技术专?/FONT></A> 中可以找到关?Java ~程的各个方面的文章?BR><BR> <LI>请参?<A ><FONT color=#5c81a7>Developer Bookstore</FONT></A>Q以获得一些技术书c的完整清单Q其中包括数百本 <A ><FONT color=#5c81a7>Java 相关主题</FONT></A> 的书c?BR></LI></UL><BR> <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0> <TBODY> <TR> <TD><IMG height=1 alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%"></TD></TR></TBODY></TABLE> <TABLE class=no-print cellSpacing=0 cellPadding=0 align=right> <TBODY> <TR align=right> <TD> <TABLE cellSpacing=0 cellPadding=0 border=0> <TBODY> <TR> <TD vAlign=center><IMG height=16 alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width=16 border=0><BR></TD> <TD vAlign=top align=right><A class=fbox ><B><FONT color=#996699>回页?/FONT></B></A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR><BR> <P><A name=author><span id="wmqeeuq" class=atitle><FONT face=Arial size=4>关于作?/FONT></SPAN></A></P> <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0> <TBODY> <TR> <TD colSpan=2><FONT face=Arial size=4><IMG height=5 alt="" src="http://www.ibm.com/i/c.gif" width="100%"></FONT></TD></TR> <TR vAlign=top align=left> <TD> <P><FONT face=Arial size=4></FONT></P></TD> <TD> <P>Elliotte Rusty Harold 出生在新奥尔良,现在他还定期回老家喝一美味的U葵汤。不q目前,他和d Beth 定居在纽U͘q布鲁克林的 Prospect HeightsQ同住的q有他的猫咪 CharmQ取自夸克)?MarjorieQ取自他x的名字)。他?Polytechnic 大学计算机科学的副教授,讲授 Java 技术和面向对象~程。他?<A ><FONT color=#5c81a7>Cafe au Lait</FONT></A> |站?Internet 上最受欢q的独立 Java 站点之一Q姊妹站?<A ><FONT color=#5c81a7>Cafe con Leche</FONT></A> 已经成ؓ最受欢q的 XML 站点之一。他的著作包?<A ><FONT color=#5c81a7><I>Effective XML</I> </FONT></A>?A ><FONT color=#5c81a7> <I>Processing XML with Java</I> </FONT></A>?A ><FONT color=#5c81a7> <I>Java Network Programming</I> </FONT></A>?<A ><FONT color=#5c81a7><I>The XML 1.1 Bible</I> </FONT></A>。目前他正在从事 XML ?<A ><FONT color=#5c81a7>XOM</FONT></A> API?A ><FONT color=#5c81a7>Jaxen</FONT></A> XPath 引擎?<A ><FONT color=#5c81a7>Jester</FONT></A> 试覆盖率工L开发工作?</P></TD></TR></TBODY></TABLE><BR></TD></TR></TBODY></TABLE><img src ="http://www.aygfsteel.com/ghawk/aggbug/24331.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ghawk/" target="_blank">GHawk</a> 2005-12-17 11:23 <a href="http://www.aygfsteel.com/ghawk/archive/2005/12/17/24331.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EasyMock 2.0_ReleaseCandidate 文档译http://www.aygfsteel.com/ghawk/archive/2005/12/15/24060.htmlGHawkGHawkThu, 15 Dec 2005 08:06:00 GMThttp://www.aygfsteel.com/ghawk/archive/2005/12/15/24060.htmlhttp://www.aygfsteel.com/ghawk/comments/24060.htmlhttp://www.aygfsteel.com/ghawk/archive/2005/12/15/24060.html#Feedback0http://www.aygfsteel.com/ghawk/comments/commentRss/24060.htmlhttp://www.aygfsteel.com/ghawk/services/trackbacks/24060.html阅读全文

GHawk 2005-12-15 16:06 发表评论
]]>
վ֩ģ壺 пѷ| ʲ| Ϫ| ̫| | ˮ| ¹Ȫ| | ľ| Ƕ| | | ۷| ɳ| | Ԫ| | | | | Ͻ| | Ͽ| Ϫ| ī񹤿| | ʩ| Ӣɽ| ɽ| ǿ| | | ԭ| | ݳ| | ɳ| ¹| | ٳ| |