﻿<?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-Thinking in MyLife-文章分类-test</title><link>http://www.blogjava.net/zhangzhong1018/category/25549.html</link><description>study ruby on rails</description><language>zh-cn</language><lastBuildDate>Fri, 19 Oct 2007 03:36:39 GMT</lastBuildDate><pubDate>Fri, 19 Oct 2007 03:36:39 GMT</pubDate><ttl>60</ttl><item><title>HttpUnit进行集成测试</title><link>http://www.blogjava.net/zhangzhong1018/articles/153254.html</link><dc:creator>leoli</dc:creator><author>leoli</author><pubDate>Tue, 16 Oct 2007 06:07:00 GMT</pubDate><guid>http://www.blogjava.net/zhangzhong1018/articles/153254.html</guid><wfw:comment>http://www.blogjava.net/zhangzhong1018/comments/153254.html</wfw:comment><comments>http://www.blogjava.net/zhangzhong1018/articles/153254.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangzhong1018/comments/commentRss/153254.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangzhong1018/services/trackbacks/153254.html</trackback:ping><description><![CDATA[<div class="postTitle">&nbsp;</div>
<div class="postText">
<p><strong>内容摘要</strong></p>
<p class="normal">HttpUnit是一个集成测试工具，主要关注Web应用的测试，提供的帮助类让测试者可以通过Java类和服务器进行交互，并且将服务器端的响应当作文本或者DOM对象进行处理。HttpUnit还提供了一个模拟Servlet容器，让你可以不需要发布Servlet，就可以对Servlet的内部代码进行测试。本文中作者将详细的介绍如何使用HttpUnit提供的类完成集成测试。</p>
<p><strong>1&nbsp;&nbsp;HttpUnit简介</strong></p>
<p class="normal">HttpUnit是SourceForge下面的一个开源项目，它是基于JUnit的一个测试框架，主要关注于测试Web应用，解决使用JUnit框架无法对远程Web内容进行测试的弊端。当前的最新版本是1.5.4。为了让HtpUnit正常运行，你应该安装JDK1.3.1或者以上版本。</p>
<p class="normal"><strong>1.1&nbsp;&nbsp;工作原理</strong></p>
<p class="normal">HttpUnit通过模拟浏览器的行为，处理页面框架（frames）,cookies,页面跳转（redirects）等。通过HttpUnit提供的功能，你可以和服务器端进行信息交互，将返回的网页内容作为普通文本、XML Dom对象或者是作为链接、页面框架、图像、表单、表格等的集合进行处理，然后使用JUnit框架进行测试，还可以导向一个新的页面，然后进行新页面的处理，这个功能使你可以处理一组在一个操作链中的页面。</p>
<p class="normal"><strong>1.2&nbsp;&nbsp;和其他商业工具的对比</strong></p>
<p class="normal">商业工具一般使用记录、回放的功能来实现测试，但是这里有个缺陷，就是当页面设计被修改以后，这些被记录的行为就不能重用了，需要重新录制才能继续测试。</p>
<p class="normal">举个例子：如果页面上有个元素最先的设计是采用单选框，这个时候你开始测试，那么这些工具记录的就是你的单项选择动作，但是如果你的设计发生了变化，比如说我改成了下拉选择，或者使用文本框接受用户输入，这时候，你以前录制的测试过程就无效了，必须要重新录制。</p>
<p class="normal">而HttpUnit因为关注点是这些控件的内容，所以不管你的外在表现形式如何变化，都不影响你已确定测试的可重用性。</p>
<p class="normal">更多的关于httpunit的信息请访问httpunit的主页<a href="http://httpunit.sourceforge.net/"><font color="#9966cc">http://httpunit.sourceforge.net</font></a></p>
<p><strong>2&nbsp;&nbsp;作者的演示环境</strong></p>
<p class="normal">系统平台：Windows 2000 Server</p>
<p class="normal">应用服务器：深圳金蝶的apusic3.0</p>
<p class="normal">开发工具： eclipse 2.1.2</p>
<p><strong>3&nbsp;&nbsp;HttpUnit安装、环境配置</strong></p>
<p class="normal"><strong>3.1&nbsp;&nbsp;安装</strong></p>
<p class="normal">1. 到HttpUnit的主页http://httpunit.sourceforge.net下载最新的包文件，当前的最新版本是1.5.4。
<p class="normal">2. 将下载的Zip包解压缩到c:/httpunit(后面将使用%httpunit_home%引用该目录)
<p class="normal"><strong>3.2&nbsp;&nbsp;环境配置</strong></p>
<p class="normal">作者的演示程序都是在eclipse中开发、执行的，所以环境配置都是以eclipse为例，如果你使用其他的开发工具，请根据这些步骤进行环境配置。</p>
<ol>
    <li>启动eclipse，建立一个java工程
    <li>将%httpunit_home%/lib/*.jar; %httpunit_home%/jars/*.jar加入到该java工程的Java build Path变量中 </li>
</ol>
<p><strong>4&nbsp;&nbsp;如何使用httpunit处理页面的内容</strong></p>
<p class="normal">WebConversation类是HttpUnit框架中最重要的类，它用于模拟浏览器的行为。其他几个重要的类是：</p>
<p class="normal">WebRequest类，模仿客户请求，通过它可以向服务器发送信息。</p>
<p class="normal">WebResponse类，模拟浏览器获取服务器端的响应信息。</p>
<p class="normal"><strong>4.1&nbsp;&nbsp;获取指定页面的内容</strong></p>
<p class="normal"><strong>4.1.1&nbsp;&nbsp;直接获取页面内容</strong></p>
<pre>System.out.println("直接获取网页内容：");
//建立一个WebConversation实例
WebConversation wc = new WebConversation();
//向指定的URL发出请求，获取响应
WebResponse wr = wc.getResponse( "http://localhost:6888/HelloWorld.html" );
//用getText方法获取相应的全部内容
//用System.out.println将获取的内容打印在控制台上
System.out.println( wr.getText() );
</pre>
<p class="normal"><strong>4.1.2&nbsp;&nbsp;通过Get方法访问页面并且加入参数</strong></p>
<pre>System.out.println("向服务器发送数据，然后获取网页内容：");
//建立一个WebConversation实例
WebConversation wc = new WebConversation();
//向指定的URL发出请求
WebRequest req = new GetMethodWebRequest( "http://localhost:6888/HelloWorld.jsp" );
//给请求加上参数
req.setParameter("username","姓名");
//获取响应对象
WebResponse resp = wc.getResponse( req );
//用getText方法获取相应的全部内容
//用System.out.println将获取的内容打印在控制台上
System.out.println( resp.getText() );
</pre>
<p class="normal"><strong>4.1.3&nbsp;通过Post方法访问页面并且加入参数</strong></p>
<pre>System.out.println("使用Post方式向服务器发送数据，然后获取网页内容：");
//建立一个WebConversation实例
WebConversation wc = new WebConversation();
//向指定的URL发出请求
WebRequest req = new PostMethodWebRequest( "http://localhost:6888/HelloWorld.jsp" );
//给请求加上参数
req.setParameter("username","姓名");
//获取响应对象
WebResponse resp = wc.getResponse( req );
//用getText方法获取相应的全部内容
//用System.out.println将获取的内容打印在控制台上
System.out.println( resp.getText() );
</pre>
<p class="normal">大家关注一下上面代码中打了下划线的两处内容，应该可以看到，使用Get、Post方法访问页面的区别就是使用的请求对象不同。</p>
<p class="normal"><strong>4.2&nbsp;&nbsp;处理页面中的链接</strong></p>
<p class="normal">这里的演示是找到页面中的某一个链接，然后模拟用户的单机行为，获得它指向文件的内容。比如在我的页面HelloWorld.html中有一个链接，它显示的内容是TestLink，它指向我另一个页面TestLink.htm. TestLink.htm里面只显示TestLink.html几个字符。</p>
<p class="normal">下面是处理代码：</p>
<pre>System.out.println("获取页面中链接指向页面的内容：");
//建立一个WebConversation实例
WebConversation wc = new WebConversation();
//获取响应对象
WebResponse   resp = wc.getResponse( "http://localhost:6888/HelloWorld.html" );
//获得页面链接对象
WebLink       link = resp.getLinkWith( "TestLink" );
//模拟用户单击事件
link.click();
//获得当前的响应对象
WebResponse   nextLink = wc.getCurrentPage();
//用getText方法获取相应的全部内容
//用System.out.println将获取的内容打印在控制台上
System.out.println( nextLink.getText() );
</pre>
<p class="normal"><strong>4.3&nbsp;&nbsp;处理页面中的表格</strong></p>
<p class="normal">表格是用来控制页面显示的常规对象，在HttpUnit中使用数组来处理页面中的多个表格，你可以用resp.getTables()方法获取页面所有的表格对象。他们依照出现在页面中的顺序保存在一个数组里面。</p>
<p class="normal">[注意] Java中数组下标是从0开始的，所以取第一个表格应该是resp.getTables()[0]，其他以此类推。</p>
<p class="normal">下面的例子演示如何从页面中取出第一个表格的内容并且将他们循环显示出来：</p>
<pre>System.out.println("获取页面中表格的内容：");
//建立一个WebConversation实例
WebConversation wc = new WebConversation();
//获取响应对象
WebResponse   resp = wc.getResponse( "http://localhost:6888/HelloWorld.html" );
//获得对应的表格对象
WebTable webTable = resp.getTables()[0];
//将表格对象的内容传递给字符串数组
String[][] datas = webTable.asText();
//循环显示表格内容
int i = 0 ,j = 0;
int m = datas[0].length;
int n = datas.length;
while (i&lt;n){
j=0;
while(j&lt;m){
System.out.println("表格中第"+(i+1)+"行第"+
(j+1)+"列的内容是："+datas[i][j]);
++j;
}
++i;
}
</pre>
<p class="normal"><strong>4.4&nbsp;&nbsp;处理页面中的表单</strong></p>
<p class="normal">表单是用来接受用户输入，也可以向用户显示用户已输入信息（如需要用户修改数据时，通常会显示他以前输入过的信息），在HttpUnit中使用数组来处理页面中的多个表单，你可以用resp.getForms()方法获取页面所有的表单对象。他们依照出现在页面中的顺序保存在一个数组里面。</p>
<p class="normal">[注意] Java中数组下标是从0开始的，所以取第一个表单应该是resp.getForms()[0]，其他以此类推。</p>
<p class="normal">下面的例子演示如何从页面中取出第一个表单的内容并且将他们循环显示出来：</p>
<pre>System.out.println("获取页面中表单的内容：");
//建立一个WebConversation实例
WebConversation wc = new WebConversation();
//获取响应对象
WebResponse   resp = wc.getResponse( "http://localhost:6888/HelloWorld.html" );
//获得对应的表单对象
WebForm webForm = resp.getForms()[0];
//获得表单中所有控件的名字
String[] pNames = webForm.getParameterNames();
int i = 0;
int m = pNames.length;
//循环显示表单中所有控件的内容
while(i&lt;m){
System.out.println("第"+(i+1)+"个控件的名字是"+pNames[i]+
"，里面的内容是"+webForm.getParameterValue(pNames[i]));
++i;
}
</pre>
<p><strong>5&nbsp;&nbsp;如何使用httpunit进行测试</strong></p>
<p class="normal"><strong>5.1&nbsp;&nbsp;对页面内容进行测试</strong></p>
<p class="normal">httpunit中的这部分测试完全采用了JUnit的测试方法，即直接将你期望的结果和页面中的输出内容进行比较。不过这里的测试就简单多了，只是字符串和字符串的比较。</p>
<p class="normal">比如你期望中的页面显示是中有一个表格，它是页面中的第一个表格，而且他的第一行第一列的数据应该是显示username，那么你可以使用下面的代码进行自动化测试：</p>
<pre>System.out.println("获取页面中表格的内容并且进行测试：");
//建立一个WebConversation实例
WebConversation wc = new WebConversation();
//获取响应对象
WebResponse   resp = wc.getResponse( "http://localhost:6888/TableTest.html" );
//获得对应的表格对象
WebTable webTable = resp.getTables()[0];
//将表格对象的内容传递给字符串数组
String[][] datas = webTable.asText();
//对表格内容进行测试
String expect = "中文";
Assert.assertEquals(expect,datas[0][0]);
</pre>
<p class="normal"><strong>5.2&nbsp;&nbsp;对Servlet进行测试</strong></p>
<p class="normal">除了对页面内容进行测试外，有时候（比如开发复杂的Servlets的时候），你需要对Servlet本身的代码块进行测试，这时候你可以选择HttpUnit，它可以提供一个模拟的Servlet容器，让你的Servlet代码不需要发布到Servlet容器（如tomcat）就可以直接测试。
<p class="normal"><strong>5.2.1&nbsp;&nbsp;原理简介</strong></p>
<p class="normal">使用httpunit测试Servlet时，请创建一个ServletRunner的实例，他负责模拟Servlet容器环境。如果你只是测试一个Servlet,你可以直接使用registerServlet方法注册这个Servlet，如果需要配置多个Servlet，你可以编写自己的web.xml，然后在初始化ServletRunner的时候将它的位置作为参数传给ServletRunner的构造器。</p>
<p class="normal">在测试Servlet时，应该记得使用ServletUnitClient类作为客户端，他和前面用过的WebConversation差不多，都继承自WebClient，所以他们的调用方式基本一致。要注意的差别是，在使用ServletUnitClient时，他会忽略URL中的主机地址信息，而是直接指向他的ServletRunner实现的模拟环境。</p>
<p class="normal"><strong>5.2.2&nbsp;&nbsp;简单测试</strong></p>
<p class="normal">本实例只是演示如何简单的访问Servlet并且获取他的输出信息，例子中的Servlet在接到用户请求的时候只是返回一串简单的字符串：Hello World!.
<p class="normal">1. Servlet的代码如下：
<pre>public class MyServlet extends HttpServlet {
public void service(HttpServletRequest req, HttpServletResponse resp)
throws IOException
{
PrintWriter out = resp.getWriter();
//向浏览器中写一个字符串Hello World!
out.println("
<html>
    Hello World!");
    out.close();
    }
    }
    </pre>
    <p class="normal">2. 测试的调用代码如下：
    <pre>//创建Servlet的运行环境
    ServletRunner sr = new ServletRunner();
    //向环境中注册Servlet
    sr.registerServlet( "myServlet", MyServlet.class.getName() );
    //创建访问Servlet的客户端
    ServletUnitClient sc = sr.newClient();
    //发送请求
    WebRequest request   = new GetMethodWebRequest( "http://localhost/myServlet" );
    //获得模拟服务器的信息
    WebResponse response = sc.getResponse( request );
    //将获得的结果打印到控制台上
    System.out.println(response.getText());
    </pre>
    <p class="normal"><strong>5.2.3&nbsp;&nbsp;测试Servlet的内部行为</strong></p>
    <p class="normal">对于开发者来说，仅仅测试请求和返回信息是不够的，所以HttpUnit提供的ServletRunner模拟器可以让你对被调用Servlet内部的行为进行测试。和简单测试中不同，这里使用了InvocationContext获得该Servlet的环境，然后你可以通过InvocationContext对象针对request、response等对象或者是该Servlet的内部行为（非服务方法）进行操作。</p>
    <p class="normal">下面的代码演示了如何使用HttpUnit模拟Servlet容器，并且通过InvocationContext对象，测试Servlet内部行为的大部分工作，比如控制request、session、response等。</p>
    <pre>//创建Servlet的运行环境
    ServletRunner sr = new ServletRunner();
    //向环境中注册Servlet
    sr.registerServlet( "InternalServlet", InternalServlet.class.getName() );
    //创建访问Servlet的客户端
    ServletUnitClient sc = sr.newClient();
    //发送请求
    WebRequest request   = new GetMethodWebRequest( "http://localhost/InternalServlet" );
    request.setParameter("pwd","pwd");
    //获得该请求的上下文环境
    InvocationContext ic = sc.newInvocation( request );
    //调用Servlet的非服务方法
    InternalServlet is = (InternalServlet)ic.getServlet();
    is.myMethod();
    //直接通过上下文获得request对象
    System.out.println("request中获取的内容："+ic.getRequest().getParameter("pwd"));
    //直接通过上下文获得response对象,并且向客户端输出信息
    ic.getResponse().getWriter().write("haha");
    //直接通过上下文获得session对象，控制session对象
    //给session赋值
    ic.getRequest().getSession().setAttribute("username","timeson");
    //获取session的值
    System.out.println("session中的值："+ic.getRequest().getSession().getAttribute("username"));
    //使用客户端获取返回信息，并且打印出来
    WebResponse response = ic.getServletResponse();
    System.out.println(response.getText());
    </pre>
    <p class="normal"><strong>[注意]</strong></p>
    <p class="normal">在测试Servlet的之前，你必须通过InvocationContext完成Servlet中的service方法中完成的工作，因为通过newInvocation方法获取InvocationContext实例的时候该方法并没有被调用。</p>
    <p><strong>6&nbsp;&nbsp;总结</strong></p>
    <p class="normal">本文中，作者详细的演示和介绍了如何使用HttpUnit提供的类来进行集成测试，主要实现以下操作：</p>
    <ol>
        <li>模拟用户行为向服务器发送请求，传递参数
        <li>模拟用户接受服务器的响应信息，并且通过辅助类分析这些响应信息，结合JUnit框架进行测试
        <li>使用HttpUnit提供的模拟Servler容器,测试开发中的Servlet的内部行为 </li>
    </ol>
    <p><strong>参考资料</strong></p>
    <ol>
        <li>HttpUnit帮助&nbsp;&nbsp;<a href="http://httpunit.sourceforge.net/"><font color="#9966cc">http://httpunit.sourceforge.net</font></a>
        <li>JUnit帮助&nbsp;&nbsp;<a href="http://junit.org/index.htm"><font color="#594fbf">http://junit.org/index.htm</font></a> </li>
    </ol>
    </div>
<img src ="http://www.blogjava.net/zhangzhong1018/aggbug/153254.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangzhong1018/" target="_blank">leoli</a> 2007-10-16 14:07 <a href="http://www.blogjava.net/zhangzhong1018/articles/153254.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用 ant 自动化测试 （转）</title><link>http://www.blogjava.net/zhangzhong1018/articles/142411.html</link><dc:creator>leoli</dc:creator><author>leoli</author><pubDate>Mon, 03 Sep 2007 10:00:00 GMT</pubDate><guid>http://www.blogjava.net/zhangzhong1018/articles/142411.html</guid><wfw:comment>http://www.blogjava.net/zhangzhong1018/comments/142411.html</wfw:comment><comments>http://www.blogjava.net/zhangzhong1018/articles/142411.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangzhong1018/comments/commentRss/142411.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangzhong1018/services/trackbacks/142411.html</trackback:ping><description><![CDATA[<div align="center"><strong><font size="4">利用ant和junit实现单元测试的自动化</font></strong></div>
<div align="center">&nbsp;</div>
<div style="text-indent: 21.75pt">在软件开发过程中，我们通常需要对各个功能模块以至类的方法进行详细的测试。这种对最小的软件单元进行验证的工作也叫做单元测试，单元测试通常在编码过程中进行，在以测试驱动开发的项目中，单元测试是一项非常重要的工作，但随着开发过程的深入，我们所积累的单元测试案例就会越来越多，面对成百上千个测试类，单独运行每个案例不仅费时，而且很难在以后的集成测试中利用先前的单元测试案例构建出一个完整的测试报告。</div>
<div style="text-indent: 21.75pt">Junit是一个用于java软件测试的开源项目，主要的应用也是作为单元测试，虽然设计短小，但功能却是非常强大。目前有很多在junit上进行扩展的项目帮助我们完成各种测试。比如web性能测试的httpunit，jmeter，用于代码覆盖测试的hansel，用于数据库性能测试的dbunit等等，应用遍布软件测试的各个领域。</div>
<div><span>&nbsp;&nbsp;&nbsp; Ant</span>同样是一个非常优秀的java项目构建工具。据ant的创始人James Duncan Davidson说，ant代表："Another Neat Tool"。同样的，ant在英文中是&#8220;蚂蚁&#8220;的意思，这又代表着它有建筑本领高超和身躯虽小，但功能却极其强大的意思（可以参看：<a href="http://ant.apache.org/faq.html%23ant-name">http://ant.apache.org/faq.html#ant-name</a>），ant项目从2000年开始，一直未停止更新工作，目前的最高版本是1.7.0。</div>
<div style="text-indent: 21.75pt">在下面我们还需要用到java的IDE开发工具Eclipse。在最新的3.2版本中，eclipse已经整合了junit4、junit3.8.1和ant1.6.5。但由于只有在ant1.7.0以后版本中才开始支持junit，因此需要我们从<a href="http://ant.apache.org/">http://ant.apache.org</a>下载最新的1.7.0，并重新设置eclipse的Ant Home的位置指向ant1.7.0的lib包。如图：</div>
<div style="text-indent: 21.75pt"></div>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/lemonfamily/5b5d7614c4ef4c888333d067fdd7759e.png" /></p>
<div></div>
<div>Eclipse里面已经自带了junit4和junit3.8.1，如果使用的jdk环境是5.0（jdk1.5）可以使用junit4，如果是1.4则使用junit3.8.1。查看和设置项目的jdk环境可以通过project -&gt;properties -&gt;java compiler.如图：</div>
<div></div>
<p><img style="width: 581px; height: 526px" height="526" alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/lemonfamily/154a389d72b04d4f93724d35e996b5d5.png" width="588" /></p>
<div style="text-indent: 17.95pt" align="center">&nbsp;</div>
<div><span>&nbsp;&nbsp; </span>默认情况下，"Enable project specific settings" 选项是未选中的，则项目使用当前操作系统默认的java环境（跟你设置的java build path无关）。</div>
<div><span>&nbsp;&nbsp; </span>下面，我们创建一个测试项目，名字为：test，并创建两个源文件夹:src和test..把项目源文件和测试文件分开放在这两个文件夹中。</div>
<div>我们在src编写一个测试类：</div>
<div>&nbsp;</div>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 426.1pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="568">
            <div align="left"><strong><span style="font-size: 10pt; color: #7f0055">package</span></strong><span style="font-size: 10pt; color: black"> com.widetrust;</span></div>
            <div align="left">&nbsp;</div>
            <div align="left"><strong><span style="font-size: 10pt; color: #7f0055">public </span></strong><strong><span style="font-size: 10pt; color: #7f0055">class</span></strong><span style="font-size: 10pt; color: black"> CountService {</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; &nbsp;</span><strong><span style="font-size: 10pt; color: #7f0055">private </span></strong><strong><span style="font-size: 10pt; color: #7f0055">int </span></strong><span style="font-size: 10pt; color: #0000c0">summary</span><span style="font-size: 10pt; color: black">;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 10pt; color: #7f0055">private </span></strong><strong><span style="font-size: 10pt; color: #7f0055">int </span></strong><span style="font-size: 10pt; color: #0000c0">count</span><span style="font-size: 10pt; color: black">;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 10pt; color: #7f0055">public </span></strong><strong><span style="font-size: 10pt; color: #7f0055">boolean</span></strong><span style="font-size: 10pt; color: black"> stat(</span><strong><span style="font-size: 10pt; color: #7f0055">int</span></strong><span style="font-size: 10pt; color: black"> visitor){</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: #0000c0">count</span><span style="font-size: 10pt; color: black">++;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: #0000c0">summary</span><span style="font-size: 10pt; color: black"> += visitor;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 10pt; color: #7f0055">if</span></strong><span style="font-size: 10pt; color: black">(</span><span style="font-size: 10pt; color: #0000c0">summary</span><span style="font-size: 10pt; color: black">&gt;1000 &amp;&amp; </span><span style="font-size: 10pt; color: #0000c0">count</span><span style="font-size: 10pt; color: black">&gt;2){</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 10pt; color: #7f0055">return </span></strong><strong><span style="font-size: 10pt; color: #7f0055">true</span></strong><span style="font-size: 10pt; color: black">;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; }</span><strong><span style="font-size: 10pt; color: #7f0055">else</span></strong><span style="font-size: 10pt; color: black">{</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 10pt; color: #7f0055">return </span></strong><strong><span style="font-size: 10pt; color: #7f0055">false</span></strong><span style="font-size: 10pt; color: black">;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; }</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp; }</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">}</span></div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>在test文件夹写个测试该类的类：</div>
<div>&nbsp;</div>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 426.1pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="568">
            <div align="left"><strong><span style="font-size: 10pt; color: #7f0055">package</span></strong><span style="font-size: 10pt; color: black"> com.widetrust.test;</span></div>
            <div align="left">&nbsp;</div>
            <div align="left"><strong><span style="font-size: 10pt; color: #7f0055">import</span></strong><span style="font-size: 10pt; color: black"> com.widetrust.CountService;</span></div>
            <div align="left"><strong><span style="font-size: 10pt; color: #7f0055">import</span></strong><span style="font-size: 10pt; color: black"> junit.framework.TestCase;</span></div>
            <div align="left">&nbsp;</div>
            <div align="left"><strong><span style="font-size: 10pt; color: #7f0055">public </span></strong><strong><span style="font-size: 10pt; color: #7f0055">class</span></strong><span style="font-size: 10pt; color: black"> TestCountService </span><strong><span style="font-size: 10pt; color: #7f0055">extends</span></strong><span style="font-size: 10pt; color: black"> TestCase {</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; CountService </span><span style="font-size: 10pt; color: #0000c0">cs</span><span style="font-size: 10pt; color: black">;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 10pt; color: #7f0055">protected </span></strong><strong><span style="font-size: 10pt; color: #7f0055">void</span></strong><span style="font-size: 10pt; color: black"> setUp() </span><strong><span style="font-size: 10pt; color: #7f0055">throws</span></strong><span style="font-size: 10pt; color: black"> Exception {</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="font-size: 10pt; color: #0000c0">cs</span><span style="font-size: 10pt; color: black"> = </span><strong><span style="font-size: 10pt; color: #7f0055">new</span></strong><span style="font-size: 10pt; color: black"> CountService();</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; }</span></div>
            <div align="left">&nbsp;</div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 10pt; color: #7f0055">protected </span></strong><strong><span style="font-size: 10pt; color: #7f0055">void</span></strong><span style="font-size: 10pt; color: black"> tearDown() </span><strong><span style="font-size: 10pt; color: #7f0055">throws</span></strong><span style="font-size: 10pt; color: black"> Exception {</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; }</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 10pt; color: #7f0055">public </span></strong><strong><span style="font-size: 10pt; color: #7f0055">void</span></strong><span style="font-size: 10pt; color: black"> testStat(){&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; <em>assertEquals</em>(</span><strong><span style="font-size: 10pt; color: #7f0055">true</span></strong><span style="font-size: 10pt; color: black">, </span><span style="font-size: 10pt; color: #0000c0">cs</span><span style="font-size: 10pt; color: black">.stat(4000));</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; }</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 10pt; color: #7f0055">public </span></strong><strong><span style="font-size: 10pt; color: #7f0055">void</span></strong><span style="font-size: 10pt; color: black"> testStat2(){</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: #0000c0">cs</span><span style="font-size: 10pt; color: black">.stat(2000);</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: #0000c0">cs</span><span style="font-size: 10pt; color: black">.stat(2000);</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; <em>assertEquals</em>(</span><strong><span style="font-size: 10pt; color: #7f0055">true</span></strong><span style="font-size: 10pt; color: black">, </span><span style="font-size: 10pt; color: #0000c0">cs</span><span style="font-size: 10pt; color: black">.stat(3000));</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; }</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">}</span></div>
            <div align="left">&nbsp;</div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div style="text-indent: 21.75pt">当然我们可以利用eclipse的Run As Junit Test(快捷键：Alt+Shift+X T)运行我们刚写好的测试案例，但有个问题是eclipse不能正确的同步我们的开发和测试程序，而且，我们可能还希望测试的过程中为我们提供一份详细的报告文档，以供我们在测试后的改进过程中的讨论。现在我们使用ant的自动编译功能来实现测试的自动化，并让它生成一份详细的测试报告。</div>
<div>&nbsp;&nbsp;注意的是，ant自带了junit的支持包，但项目需要junit.jar，还需要在项目的lib文件夹中放置junit.jar，（这里我假设工程目录存放项目依赖组件的是lib文件夹）如果我们要单独使用ant编译整个项目，需要在项目构建文件build.xml中定义编译所用到的lib包。当然，为了省事，我们也可以把项目依赖的lib包放到ant的设置项Global Entries 中，如图：</div>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/lemonfamily/c5fe2a70f8ed4eb0992ab6368b6ebdc5.png" /></p>
<div>&nbsp;</div>
<div>这里我们把项目依赖包都设置在build.xml中：</div>
<div>在项目的根目录创建一个build.xml，内容如下：</div>
<div>&nbsp;</div>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; width: 464.4pt; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" width="619" border="1">
    <tbody>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 464.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="619">
            <div align="left"><span style="font-size: 10pt; color: gray">&lt;?xml version="1.0"?&gt;</span></div>
            <div align="left">&nbsp;</div>
            <div align="left"><span style="font-size: 10pt; color: navy">&lt;project </span><span style="font-size: 10pt; color: navy">name=</span><span style="font-size: 10pt; color: green">"ant and junit" </span><span style="font-size: 10pt; color: navy">default=</span><span style="font-size: 10pt; color: green">"test auot junit and report" </span><span style="font-size: 10pt; color: navy">basedir=</span><span style="font-size: 10pt; color: green">"."</span><span style="font-size: 10pt; color: navy">&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: maroon">&lt;!-- </span><span style="font-size: 10pt; color: maroon">定义工程依赖的</span><span style="font-size: 10pt; color: maroon">jar</span><span style="font-size: 10pt; color: maroon">包存放的位置</span><span style="font-size: 10pt; color: maroon"> --&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;property </span><span style="font-size: 10pt; color: navy">name=</span><span style="font-size: 10pt; color: green">"lib.dir" </span><span style="font-size: 10pt; color: navy">value=</span><span style="font-size: 10pt; color: green">"lib"</span><span style="font-size: 10pt; color: navy">/&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;path </span><span style="font-size: 10pt; color: navy">id=</span><span style="font-size: 10pt; color: green">"classpath"</span><span style="font-size: 10pt; color: navy">&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;fileset </span><span style="font-size: 10pt; color: navy">dir=</span><span style="font-size: 10pt; color: green">"${lib.dir}" </span><span style="font-size: 10pt; color: navy">includes=</span><span style="font-size: 10pt; color: green">"**/*.jar"</span><span style="font-size: 10pt; color: navy">/&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;/path&gt;</span></div>
            <div align="left">&nbsp;</div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;property </span><span style="font-size: 10pt; color: navy">name=</span><span style="font-size: 10pt; color: green">"output folder" </span><span style="font-size: 10pt; color: navy">value=</span><span style="font-size: 10pt; color: green">"classes"</span><span style="font-size: 10pt; color: navy">/&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;property </span><span style="font-size: 10pt; color: navy">name=</span><span style="font-size: 10pt; color: green">"src folder" </span><span style="font-size: 10pt; color: navy">value=</span><span style="font-size: 10pt; color: green">"src"</span><span style="font-size: 10pt; color: navy">/&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;property </span><span style="font-size: 10pt; color: navy">name=</span><span style="font-size: 10pt; color: green">"test folder" </span><span style="font-size: 10pt; color: navy">value=</span><span style="font-size: 10pt; color: green">"test"</span><span style="font-size: 10pt; color: navy">/&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;property </span><span style="font-size: 10pt; color: navy">name=</span><span style="font-size: 10pt; color: green">"report folder" </span><span style="font-size: 10pt; color: navy">value=</span><span style="font-size: 10pt; color: green">"report"</span><span style="font-size: 10pt; color: navy">/&gt;</span></div>
            <div align="left">&nbsp;</div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;target </span><span style="font-size: 10pt; color: navy">name=</span><span style="font-size: 10pt; color: green">"clean"</span><span style="font-size: 10pt; color: navy">&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;delete </span><span style="font-size: 10pt; color: navy">dir=</span><span style="font-size: 10pt; color: green">"report"</span><span style="font-size: 10pt; color: navy">/&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;echo&gt;</span><span style="font-size: 10pt; color: black">清除测试报告文件 </span><span style="font-size: 10pt; color: black">成功</span><span style="font-size: 10pt; color: black">!</span><span style="font-size: 10pt; color: navy">&lt;/echo&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;/target&gt;</span></div>
            <div align="left">&nbsp;</div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;target </span><span style="font-size: 10pt; color: navy">name=</span><span style="font-size: 10pt; color: green">"compile init"</span><span style="font-size: 10pt; color: navy">&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;mkdir </span><span style="font-size: 10pt; color: navy">dir=</span><span style="font-size: 10pt; color: green">"${output folder}"</span><span style="font-size: 10pt; color: navy">/&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;echo&gt;</span><span style="font-size: 10pt; color: black">创建编译文件夹 </span><span style="font-size: 10pt; color: black">成功</span><span style="font-size: 10pt; color: black">!</span><span style="font-size: 10pt; color: navy">&lt;/echo&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;/target&gt;</span></div>
            <div align="left">&nbsp;</div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;target </span><span style="font-size: 10pt; color: navy">name=</span><span style="font-size: 10pt; color: green">"report init"</span><span style="font-size: 10pt; color: navy">depends=</span><span style="font-size: 10pt; color: green">"clean"</span><span style="font-size: 10pt; color: navy">&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;mkdir </span><span style="font-size: 10pt; color: navy">dir=</span><span style="font-size: 10pt; color: green">"${report folder}"</span><span style="font-size: 10pt; color: navy">/&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;echo&gt;</span><span style="font-size: 10pt; color: black">创建测试报告文件夹 </span><span style="font-size: 10pt; color: black">成功</span><span style="font-size: 10pt; color: black">!</span><span style="font-size: 10pt; color: navy">&lt;/echo&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;/target&gt;</span></div>
            <div align="left">&nbsp;</div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;target </span><span style="font-size: 10pt; color: navy">name=</span><span style="font-size: 10pt; color: green">"compile"</span><span style="font-size: 10pt; color: navy">depends=</span><span style="font-size: 10pt; color: green">"compile init"</span><span style="font-size: 10pt; color: navy">&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;javac </span><span style="font-size: 10pt; color: navy">srcdir=</span><span style="font-size: 10pt; color: green">"${src folder}" </span><span style="font-size: 10pt; color: navy">destdir=</span><span style="font-size: 10pt; color: green">"${output folder}" </span><span style="font-size: 10pt; color: navy">classpathref=</span><span style="font-size: 10pt; color: green">"classpath"</span><span style="font-size: 10pt; color: navy">/&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;echo&gt;</span><span style="font-size: 10pt; color: black">项目源文件</span><span style="font-size: 10pt; color: black">编译 成功</span><span style="font-size: 10pt; color: black">!</span><span style="font-size: 10pt; color: navy">&lt;/echo&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;/target&gt;</span></div>
            <div align="left">&nbsp;</div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;target </span><span style="font-size: 10pt; color: navy">name=</span><span style="font-size: 10pt; color: green">"test compile" </span><span style="font-size: 10pt; color: navy">depends=</span><span style="font-size: 10pt; color: green">"report init"</span><span style="font-size: 10pt; color: navy">&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;javac </span><span style="font-size: 10pt; color: navy">srcdir=</span><span style="font-size: 10pt; color: green">"${test folder}" </span><span style="font-size: 10pt; color: navy">destdir=</span><span style="font-size: 10pt; color: green">"${output folder}" </span><span style="font-size: 10pt; color: navy">classpathref=</span><span style="font-size: 10pt; color: green">"classpath"</span><span style="font-size: 10pt; color: navy">/&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;echo&gt;</span><span style="font-size: 10pt; color: black">项目测试文件</span><span style="font-size: 10pt; color: black">编译 成功</span><span style="font-size: 10pt; color: black">!</span><span style="font-size: 10pt; color: navy">&lt;/echo&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;/target&gt;</span></div>
            <div align="left">&nbsp;</div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;target </span><span style="font-size: 10pt; color: navy">name=</span><span style="font-size: 10pt; color: green">"all compile" </span><span style="font-size: 10pt; color: navy">depends=</span><span style="font-size: 10pt; color: green">"compile, test compile"</span><span style="font-size: 10pt; color: navy">&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;/target&gt;</span></div>
            <div align="left">&nbsp;</div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;target </span><span style="font-size: 10pt; color: navy">name=</span><span style="font-size: 10pt; color: green">"test auot junit and report" </span><span style="font-size: 10pt; color: navy">depends=</span><span style="font-size: 10pt; color: green">"all compile"</span><span style="font-size: 10pt; color: navy">&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;junit</span><span style="font-size: 10pt; color: navy">print summary=</span><span style="font-size: 10pt; color: green">"on" </span><span style="font-size: 10pt; color: navy">fork=</span><span style="font-size: 10pt; color: green">"true" </span><span style="font-size: 10pt; color: navy">showoutput=</span><span style="font-size: 10pt; color: green">"true"</span><span style="font-size: 10pt; color: navy">&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;classpath&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;fileset </span><span style="font-size: 10pt; color: navy">dir=</span><span style="font-size: 10pt; color: green"><span style="font-size: 10pt; color: green">"${lib.dir}</span>"</span><span style="font-size: 10pt; color: navy">includes=</span><span style="font-size: 10pt; color: green">"**/*.jar"</span><span style="font-size: 10pt; color: navy">/&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;pathelement </span><span style="font-size: 10pt; color: navy">path=</span><span style="font-size: 10pt; color: green">"${output folder}"</span><span style="font-size: 10pt; color: navy">/&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;/classpath&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;formatter </span><span style="font-size: 10pt; color: navy">type=</span><span style="font-size: 10pt; color: green">"xml"</span><span style="font-size: 10pt; color: navy">/&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;batchtest </span><span style="font-size: 10pt; color: navy">todir=</span><span style="font-size: 10pt; color: green">"${report folder}"</span><span style="font-size: 10pt; color: navy">&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;fileset </span><span style="font-size: 10pt; color: navy">dir=</span><span style="font-size: 10pt; color: green">"${output folder}"</span><span style="font-size: 10pt; color: navy">&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;include </span><span style="font-size: 10pt; color: navy">name=</span><span style="font-size: 10pt; color: green">"**/Test*.*"</span><span style="font-size: 10pt; color: navy">/&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;/fileset&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;/batchtest&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;/junit&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;junitreport </span><span style="font-size: 10pt; color: navy">todir=</span><span style="font-size: 10pt; color: green">"${report folder}"</span><span style="font-size: 10pt; color: navy">&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;fileset</span><span style="font-size: 10pt; color: navy">dir=</span><span style="font-size: 10pt; color: green">"${report folder}"</span><span style="font-size: 10pt; color: navy">&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;include </span><span style="font-size: 10pt; color: navy">name=</span><span style="font-size: 10pt; color: green">"TEST-*.xml"</span><span style="font-size: 10pt; color: navy">/&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;/fileset&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;report </span><span style="font-size: 10pt; color: navy">format=</span><span style="font-size: 10pt; color: green">"frames" </span><span style="font-size: 10pt; color: navy">todir=</span><span style="font-size: 10pt; color: green">"${report folder}"</span><span style="font-size: 10pt; color: navy">/&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;/junitreport&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;/target&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: navy">&lt;/project&gt;</span></div>
            <div align="left">&nbsp;</div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>我们在eclipse中利用windows&nbsp;<span>-&gt;</span> show View&nbsp;<span>-&gt;</span> Ant 打开ant工作窗口，点击&#8221;Add Buildfiles&#8221; 将项目的根目录下的build.xml添加进去，然后在ant工作窗口点运行图标，可以看到控制台上的输出：(当然，用命令行方式运行也可以)</div>
<p><img style="width: 594px; height: 457px" height="457" alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/lemonfamily/29ac98df6f2c4f2ba5f456677b7d8548.png" width="662" /></p>
<div style="text-indent: 21.75pt">&nbsp;</div>
<div style="text-indent: 21.75pt">整个项目编译成功，并在项目根目录生成一个report文件夹，我们可以从中看到一份详细的测试报告：</div>
<div style="text-indent: 21.75pt">&nbsp;</div>
<p><img style="width: 607px; height: 459px" height="457" alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/lemonfamily/59b24bb3f4504b3da4b497b21b7f3498.png" width="748" /></p>
<div style="text-indent: 21.75pt">&nbsp;</div>
<div style="text-indent: 21.75pt">我们可能会希望junit 和ant为我们提供中文的测试报告，很遗憾的是，ant并没有给我们提供这个选项，还好，ant可以让我们通过定义styledir属性，更改报告文件的输出样式的配置文件：我们要做的，就是汉化在ant安装文件夹中的junit-frames.xsl和junit-noframes.xsl，(也可以从<a href="http://download.csdn.net/user/lemonfamily">http://download.csdn.net/user/lemonfamily</a>&nbsp;下载到该文件)甚至可以在里面定义一些我们需要的东西。</div>
<div>（可以参看：<a href="http://ant.apache.org/manual/OptionalTasks/junitreport.html">http://ant.apache.org/manual/OptionalTasks/junitreport.html</a>）</div>
<div style="text-indent: 21.75pt">&nbsp;</div>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 426.1pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="568">
            <div align="left"><span style="font-size: 10pt; color: navy">&lt;junitreport</span><span style="font-size: 10pt; color: navy">todir=</span><span style="font-size: 10pt; color: green">"${report folder}"</span><span style="font-size: 10pt; color: navy">&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;fileset</span><span style="font-size: 10pt; color: navy">dir=</span><span style="font-size: 10pt; color: green">"${report folder}"</span><span style="font-size: 10pt; color: navy">&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;include</span><span style="font-size: 10pt; color: navy">name=</span><span style="font-size: 10pt; color: green">"TEST-*.xml"</span><span style="font-size: 10pt; color: navy">/&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;/fileset&gt;</span></div>
            <div align="left"><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;report</span><span style="font-size: 10pt; color: navy">format=</span><span style="font-size: 10pt; color: green">"frames"</span><span style="font-size: 10pt; color: navy">todir=</span><span style="font-size: 10pt; color: green">"${report folder}"</span><strong><span style="font-size: 10pt; color: red">styledir</span></strong><span style="font-size: 10pt; color: navy">=</span><span style="font-size: 10pt; color: green">"junitreport"</span><span style="font-size: 10pt; color: navy">/&gt;</span></div>
            <div><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: navy">&lt;/junitreport&gt;</span></div>
            </td>
        </tr>
    </tbody>
</table>
<div style="text-indent: 21.75pt">&nbsp;</div>
<div>这是更改后的效果：</div>
<div>&nbsp;</div>
<p><img style="width: 584px; height: 456px" height="456" alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/lemonfamily/9033d935e0a146598d848ba579d7d78f.png" width="678" /></p>
<div>&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp; 现在我们已经可以做到测试代码和开发代码分开，并利用ant的自动编译功能为我们执行测试计划和生成测试报告。虽然在编写测试案例的时候确实比较麻烦，我们需要详细的模拟实际应用中的环境，并寻找可能出现错误的边界值帮助我们在编写实际代码时尽量减少隐患的发生，往往编写测试案例的时间比我们编写实际代码的时间还长，但这样做是非常值得的，一个软件的开发周期最长的60%都是花在寻找错误和完善的过程中。</div>
<img src ="http://www.blogjava.net/zhangzhong1018/aggbug/142411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangzhong1018/" target="_blank">leoli</a> 2007-09-03 18:00 <a href="http://www.blogjava.net/zhangzhong1018/articles/142411.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>