﻿<?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-zhyiwww -随笔分类-软件测试</title><link>http://www.blogjava.net/zhyiwww/category/11940.html</link><description>用平实的笔，记录编程路上的点点滴滴………</description><language>zh-cn</language><lastBuildDate>Thu, 31 Mar 2011 13:46:39 GMT</lastBuildDate><pubDate>Thu, 31 Mar 2011 13:46:39 GMT</pubDate><ttl>60</ttl><item><title>测试量化管理的思考</title><link>http://www.blogjava.net/zhyiwww/archive/2011/03/31/347396.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Thu, 31 Mar 2011 07:34:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2011/03/31/347396.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/347396.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2011/03/31/347396.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/347396.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/347396.html</trackback:ping><description><![CDATA[做测试管理以来，一直思考，如何把测试工作量化，可以更好的去评估何考量测试人员的工作量。<br />
有一些不成熟的想法：<br />
<br />
测试的核心用例设计。<br />
测试的量化工作围绕测试用例展开。<br />
<br />
对于项目，首先，分析测试功能点。其次，根据测试功能点设计测试用例。最后，根据测试用例执行测试。<br />
<br />
所以，对于测试工作的量化，可以根据用例的设计量、测试用例的执行量、测试用例的有效量等进行量化何评估。<br />
<br />
难点：<br />
对于不同的功能，不同的程序，测试用例的设计量不能完全反应工作量的大小。因为用例的难度的不同决定了其用例权重的不同。<br />
不过，总体来是，用例量的大小基本上可以反应工作量。所以，可以用用例设计量和测试用例有效量来评估用例设计人员的工作量。<br />
<br />
可以用测试用例的执行量来评估测试人员的测试执行工作量，用有效bug率来评估测试人员的测试效率。<br />
<br />
请有此经验的朋友多提宝贵意见。<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/347396.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2011-03-31 15:34 <a href="http://www.blogjava.net/zhyiwww/archive/2011/03/31/347396.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SVN的分支创建和合并</title><link>http://www.blogjava.net/zhyiwww/archive/2010/12/30/342018.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Thu, 30 Dec 2010 11:20:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/12/30/342018.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/342018.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/12/30/342018.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/342018.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/342018.html</trackback:ping><description><![CDATA[<p><br />
SVN项目结构通常如下：<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/zhyiwww/svn_pro_struct.jpg" border="0" height="165" width="440" /><br />
<br />
【1】创建分支比较简单<br />
不做详细说明<br />
假如创建后的分支如下图所示：<br />
<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/zhyiwww/svn/svn_branches.jpg" border="0" height="522" width="806" /><br />
<br />
注意点：<br />
（1）可以在trunk上创建分支<br />
（2）可以在分支上创建分支<br />
<br />
【2】合并分支<br />
合并分支相对来说麻烦一些，一些关键的问题要搞清楚。<br />
注意点：<br />
（1）<span style="color: red;"><strong>当前的working copy 一定是合并目标（务必切记）<br />
</strong></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;否则，不能合并成功<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;比如：你想从分支V0.0.1合并到trunk 4207上，那么，你的当前工作目录一定要是trunk<br />
（2）当前工作目录的提交只能提交到对应的分支<br />
（3）分支下的分支不能合并到trunk上<br />
（4）分支合并后，需要提交一次才能使合并有效完成<br />
</p>
<img src ="http://www.blogjava.net/zhyiwww/aggbug/342018.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-12-30 19:20 <a href="http://www.blogjava.net/zhyiwww/archive/2010/12/30/342018.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>clover记录数据库的生成方法</title><link>http://www.blogjava.net/zhyiwww/archive/2010/12/14/340647.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Tue, 14 Dec 2010 07:19:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/12/14/340647.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/340647.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/12/14/340647.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/340647.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/340647.html</trackback:ping><description><![CDATA[在使用ant+clover的时候，经常碰到下面的异常：<br />
BUILD FAILED<br />
com.atlassian.clover.registry.NoSuchRegistryException: Clover registry file "/tmp/clover-db/ant-coverage.db" does not exist, cannot be read or is a directory. <br />
Please ensure Clover has instrumented your source files. <br />
You may need to remove existing .class files for this to occur.<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.CloverDatabase.&lt;init&gt;(CloverDatabase.java:82)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.CloverDatabase.&lt;init&gt;(CloverDatabase.java:60)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.reporters.CloverReportConfig.getCoverageDatabase(CloverReportConfig.java:329)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.reporters.Current.getCoverageDatabase(Current.java:126)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.reporters.xml.XMLReporter.&lt;init&gt;(XMLReporter.java:52)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.reporters.CloverReporter.buildReporter(CloverReporter.java:70)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.tasks.CloverReportTask.generateReports(CloverReportTask.java:428)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.tasks.CloverReportTask.cloverExecute(CloverReportTask.java:385)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.tasks.CloverHtmlReportTask.cloverExecute(CloverHtmlReportTask.java:108)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.tasks.AbstractCloverTask.execute(AbstractCloverTask.java:55)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br />
&nbsp;&nbsp; &nbsp;at java.lang.reflect.Method.invoke(Method.java:616)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Task.perform(Task.java:348)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Target.execute(Target.java:357)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Target.performTasks(Target.java:385)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Project.executeTarget(Project.java:1306)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Project.executeTargets(Project.java:1189)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Main.runBuild(Main.java:758)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Main.startAnt(Main.java:217)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)<br />
<br />
Total time: 56 seconds<br />
<br />
这个错误是因为，没有生成clover记录数据库造成的。<br />
经过多次的实验，发现用下面的方法可以解决：<br />
&nbsp;&nbsp;&nbsp; &lt;target name="clover.with" depends="clover.tasks"&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;delete file="${clover.db.file}"/&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;clover-instr initstring="${clover.db.file}" srcdir="${src.dir}" <strong>destdir="${clover.tmp.dir}</strong>"&gt;&lt;/clover-instr&gt;<br />
&nbsp;&nbsp; &nbsp;&lt;/target&gt;<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;&lt;target name="clover.compile"&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;javac &nbsp;&nbsp; &nbsp;srcdir="${clover.tmp.dir}" &nbsp;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;destdir="${classes.dir}" <br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;encoding="UTF-8" <br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;includeantruntime="true" <br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;failonerror="true" <br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;verbose="false" <br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compiler="modern"<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;fork="true"<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;target="1.6"<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;nowarn="true"&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;classpath refid="build.lib"/&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/javac&gt;<br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp; &nbsp;&lt;/target&gt;<br />
<br />
这个地方，把clover.compile独立出来编译。有一个关键的地方是在粗体的部分，要指定一个临时目录，用来存放添加了stub的java类，也就说，独立一个地方存放插了桩的java类，然后对其编译，这样就能在后续的junit.test.only任务执行的时候生成clover记录数据库了。<br />
希望对使用clover的朋友能有所帮助。<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/340647.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-12-14 15:19 <a href="http://www.blogjava.net/zhyiwww/archive/2010/12/14/340647.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ant+Clover异常的解决方法</title><link>http://www.blogjava.net/zhyiwww/archive/2010/12/01/339466.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Wed, 01 Dec 2010 00:55:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/12/01/339466.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/339466.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/12/01/339466.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/339466.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/339466.html</trackback:ping><description><![CDATA[在使用ant+clover的时候，出现了如下异常：<br />
BUILD FAILED<br />
com.atlassian.clover.registry.NoSuchRegistryException: Clover registry file "/tmp/clover-db/ant-coverage.db" does not exist, cannot be read or is a directory. <br />
Please ensure Clover has instrumented your source files. <br />
You may need to remove existing .class files for this to occur.<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.CloverDatabase.&lt;init&gt;(CloverDatabase.java:82)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.CloverDatabase.&lt;init&gt;(CloverDatabase.java:60)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.reporters.CloverReportConfig.getCoverageDatabase(CloverReportConfig.java:329)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.reporters.Current.getCoverageDatabase(Current.java:126)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.reporters.xml.XMLReporter.&lt;init&gt;(XMLReporter.java:52)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.reporters.CloverReporter.buildReporter(CloverReporter.java:70)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.tasks.CloverReportTask.generateReports(CloverReportTask.java:428)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.tasks.CloverReportTask.cloverExecute(CloverReportTask.java:385)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.tasks.CloverHtmlReportTask.cloverExecute(CloverHtmlReportTask.java:108)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.tasks.AbstractCloverTask.execute(AbstractCloverTask.java:55)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br />
&nbsp;&nbsp; &nbsp;at java.lang.reflect.Method.invoke(Method.java:616)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Task.perform(Task.java:348)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Target.execute(Target.java:357)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Target.performTasks(Target.java:385)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Project.executeTarget(Project.java:1306)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Project.executeTargets(Project.java:1189)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Main.runBuild(Main.java:758)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Main.startAnt(Main.java:217)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)<br />
<br />
Total time: 56 seconds<br />
<br />
原因是没有生成clover的库文件。<br />
解决的方法是：<br />
ant with.clover&nbsp; build.clean build.compile junit.test cactus.test<br />
需要重新编译生成clover库文件。<br />
这样就生成库文件了。<br />
ant clover.html<br />
就可以生成报告了。<br />
<br />
clover的使用，有一个非常重要的注意点:<br />
<u><span style="background-color: #cfc8ff;">The &lt;clover-setup&gt; task, must be called before compiling the sources. If the "with.clover" target is not called before "code" (compile) in the same invocation of Ant, the effect of clover-setup will lost. i.e. javac does not know to use the Clover compiler to instrument your source files before compiling them. It will not create the database and generate class file for clover use, hence clover will not take effect.</span></u><strong><br />
</strong><br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/339466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-12-01 08:55 <a href="http://www.blogjava.net/zhyiwww/archive/2010/12/01/339466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu环境下ant的内存配置</title><link>http://www.blogjava.net/zhyiwww/archive/2010/11/19/338472.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Fri, 19 Nov 2010 04:54:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/11/19/338472.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/338472.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/11/19/338472.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/338472.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/338472.html</trackback:ping><description><![CDATA[配置原因：<br />
在使用ant编译系统时由于消耗内存较大，出现内存溢出异常。<br />
<br />
在ubuntu下配置方法：<br />
【1】创建ant.conf<br />
#touch /etc/ant.conf<br />
<br />
【2】添加内存配置<br />
#vim /etc/ant.conf<br />
添加如下内容:<span><br />
<br />
ANT_OPTS=<span>"-Xms256m
-Xmx512m"</span> <br />
&nbsp;<br />
</span><br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/338472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-11-19 12:54 <a href="http://www.blogjava.net/zhyiwww/archive/2010/11/19/338472.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ant warning: 'includeantruntime'问题</title><link>http://www.blogjava.net/zhyiwww/archive/2010/11/10/337729.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Wed, 10 Nov 2010 08:23:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/11/10/337729.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/337729.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/11/10/337729.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/337729.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/337729.html</trackback:ping><description><![CDATA[<br />
ant编译时出现问题如下：<br />
build.xml:95: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds<br />
<br />
解决的方法:<br />
<br />
在javac的任务标签内添加属性：<br />
includeantruntime="false"<br />
<br />
可以解决上述问题<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/337729.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-11-10 16:23 <a href="http://www.blogjava.net/zhyiwww/archive/2010/11/10/337729.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ant实现junit自动化测试时的异常问题解决</title><link>http://www.blogjava.net/zhyiwww/archive/2010/11/10/337725.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Wed, 10 Nov 2010 08:09:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/11/10/337725.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/337725.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/11/10/337725.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/337725.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/337725.html</trackback:ping><description><![CDATA[ant编译错误现象：<br />
BUILD FAILED: The classpath for junit must include junit.jar if not in Ant's own classpath.<br />
<br />
在使用Ant编译项目的时候，出现此问题。<br />
我在我的机器上编译一切正常，把项目复制到服务器上编译出现此问题，所以，我 认为是由于Ant的环境配置造成的此问题。<br />
<br />
解决方法：<br />
根据提示，把junit.jar包复制到ant_home/lib/目录下，再编译，就可以了。<br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/337725.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-11-10 16:09 <a href="http://www.blogjava.net/zhyiwww/archive/2010/11/10/337725.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ant实现junit自动化测试时的异常问题解决</title><link>http://www.blogjava.net/zhyiwww/archive/2010/11/10/337726.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Wed, 10 Nov 2010 08:09:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/11/10/337726.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/337726.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/11/10/337726.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/337726.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/337726.html</trackback:ping><description><![CDATA[ant编译错误现象：<br />
BUILD FAILED: The classpath for junit must include junit.jar if not in Ant's own classpath.<br />
<br />
在使用Ant编译项目的时候，出现此问题。<br />
我在我的机器上编译一切正常，把项目复制到服务器上编译出现此问题，所以，我 认为是由于Ant的环境配置造成的此问题。<br />
<br />
解决方法：<br />
根据提示，把junit.jar包复制到ant_home/lib/目录下，再编译，就可以了。<br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/337726.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-11-10 16:09 <a href="http://www.blogjava.net/zhyiwww/archive/2010/11/10/337726.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>servlet单元测试和覆盖率测试</title><link>http://www.blogjava.net/zhyiwww/archive/2010/11/09/337591.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Tue, 09 Nov 2010 01:38:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/11/09/337591.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/337591.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/11/09/337591.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/337591.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/337591.html</trackback:ping><description><![CDATA[工具使用cactus+clover+ant<br />
ant脚本需要注意的问题：<br />
[1]ant脚本是核心<br />
[2]clover是测试的核心<br />
[3]先保证junit和cactus测试生成xml报告正常<br />
[4]最好再加入clover覆盖率测试<br />
<br />
关于clover，一定要主要执行的顺序<br />
with.clover-&gt;junit.test-&gt;cactus.test<br />
否则，cactus的测试看不到覆盖率。<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/337591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-11-09 09:38 <a href="http://www.blogjava.net/zhyiwww/archive/2010/11/09/337591.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用cactus实现对servlet进行单元测试</title><link>http://www.blogjava.net/zhyiwww/archive/2010/10/18/335459.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Mon, 18 Oct 2010 07:30:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/10/18/335459.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/335459.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/10/18/335459.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/335459.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/335459.html</trackback:ping><description><![CDATA[&nbsp;
<h1><span style="font-family: 宋体">使用</span>cactus<span style="font-family: 宋体">实现对</span>servlet<span style="font-family: 宋体">进行单元测试</span></h1>
<p><span style="font-family: 宋体">步骤如下：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt">[1]<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">创建</span>Web<span style="font-family: 宋体">工程</span>ServletTestDemo</p>
<p style="margin-left: 21pt; text-indent: 0cm"><span style="font-family: 宋体">在</span>myeclipse<span style="font-family: 宋体">中创建</span>Web project,<span style="font-family: 宋体">命名为</span>ServletTestDemo</p>
<p style="margin-left: 21pt; text-indent: -21pt">[2]<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">下载</span>cactus-bin-1.8</p>
<p style="margin-left: 21pt; text-indent: 0cm"><span style="font-family: 宋体">从</span>apache<span style="font-family: 宋体">官方网站下载</span></p>
<p style="margin-left: 21pt; text-indent: -21pt">[3]<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;<span style="font-family: 宋体">导入</span>cactus<span style="font-family: 宋体">的相关包到项目的</span>lib<span style="font-family: 宋体">目录</span></p>
<p style="margin-left: 21pt; text-indent: 0cm">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">导入后，</span>/WebRoot/WEB-INF/lib<span style="font-family: 宋体">目录结构如下所示：</span></p>
<p style="margin-left: 21pt"><span style="color: #00b050">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |-- lib</span></p>
<p style="margin-left: 21pt"><span style="color: #00b050">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |-- cactus.core.framework.uberjar.javaEE.14-1.8.1.jar</span></p>
<p style="margin-left: 21pt"><span style="color: #00b050">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |-- cactus.integration.ant-1.8.1.jar</span></p>
<p style="margin-left: 21pt"><span style="color: #00b050">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |-- cactus.integration.shared.api-1.8.1.jar</span></p>
<p style="margin-left: 21pt"><span style="color: #00b050">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |-- commons-codec-1.4.jar</span></p>
<p style="margin-left: 21pt"><span style="color: #00b050">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |-- commons-httpclient-3.1.jar</span></p>
<p style="margin-left: 21pt"><span style="color: #00b050">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |-- commons-logging-1.1.jar</span></p>
<p style="margin-left: 21pt"><span style="color: #00b050">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |-- httpunit-1.6.jar</span></p>
<p style="margin-left: 21pt; text-indent: 0cm"><span style="color: #00b050">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp; `-- junit-3.8.2.jar </span></p>
<p style="margin-left: 21pt; text-indent: -21pt">[4]<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">配置项目</span>web.xml</p>
<p style="margin-left: 21pt; text-indent: 0cm"><span style="font-family: 宋体">在项目</span>web.xml<span style="font-family: 宋体">中添加如下内容：</span></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong><span style="color: #0d0d0d">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet&gt;</span></strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong><span style="color: #0d0d0d">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;ServletRedirector&lt;/servlet-name&gt;</span></strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong><span style="color: #0d0d0d">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;org.apache.cactus.server.ServletTestRedirector&lt;/servlet-class&gt;</span></strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong><span style="color: #0d0d0d">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt;</span></strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong><span style="color: #0d0d0d">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;param1&lt;/param-name&gt;</span></strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong><span style="color: #0d0d0d">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;value1 used for testing&lt;/param-value&gt;</span></strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong><span style="color: #0d0d0d">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;</span></strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong><span style="color: #0d0d0d">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/servlet&gt;</span></strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong><span style="color: #0d0d0d">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet&gt;</span></strong></p>
<p style="margin-left: 84pt; text-indent: 0cm"><strong><span style="color: #0d0d0d">&lt;servlet-name&gt;ServletTestRunner&lt;/servlet-name&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;servlet-class&gt;org.apache.cactus.server.runner.ServletTestRunner&lt;/servlet-class&gt;</span></strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong><span style="color: #0d0d0d">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/servlet&gt;</span></strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-mapping&gt;</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;ServletRedirector&lt;/servlet-name&gt;</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/ServletRedirector&lt;/url-pattern&gt;</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/servlet-mapping&gt;</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-mapping&gt;</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;ServletTestRunner&lt;/servlet-name&gt;</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/ServletTestRunner&lt;/url-pattern&gt;</strong></p>
<p style="margin-left: 21pt; text-indent: 0cm"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/servlet-mapping&gt;</strong></p>
<p style="margin-left: 21pt; text-indent: -21pt">[5]<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">创建</span>Servlet</p>
<p style="margin-left: 21pt; text-indent: 0cm; text-align: left" align="left"><span style="font-family: 宋体">创建</span>LoginServlet,<span style="font-family: 宋体">代码如下：</span></p>
<p style="margin-left: 21pt; text-align: left" align="left">import java.io.IOException;</p>
<p style="margin-left: 21pt; text-align: left" align="left">import java.io.PrintWriter;</p>
<p style="margin-left: 21pt; text-align: left" align="left">import javax.servlet.ServletException;</p>
<p style="margin-left: 21pt; text-align: left" align="left">import javax.servlet.http.HttpServlet;</p>
<p style="margin-left: 21pt; text-align: left" align="left">import javax.servlet.http.HttpServletRequest;</p>
<p style="margin-left: 21pt; text-align: left" align="left">import javax.servlet.http.HttpServletResponse;</p>
<p style="margin-left: 21pt; text-align: left" align="left">public class LoginServlet extends HttpServlet {</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static final long serialVersionUID = 1L;</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public LoginServlet() {</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super();</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void destroy() {</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.destroy(); // Just puts "destroy" string in log</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Put your code here</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void doGet(HttpServletRequest request, HttpServletResponse response)</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws ServletException, IOException {</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.setContentType("text/html");</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrintWriter out = response.getWriter();</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .println("&lt;!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN""&gt;");</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;HTML&gt;");</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&nbsp;&lt;HEAD&gt;&lt;TITLE&gt;A Servlet&lt;/TITLE&gt;&lt;/HEAD&gt;");</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&nbsp;&lt;BODY&gt;");</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.print("&nbsp;&nbsp;&nbsp; This is ");</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.print(this.getClass());</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println(", using the GET method");</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&nbsp;&lt;/BODY&gt;");</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;/HTML&gt;");</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.flush();</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.close();</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void doPost(HttpServletRequest request, HttpServletResponse response)</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws ServletException, IOException {</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.setContentType("text/html");</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrintWriter out = response.getWriter();</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .println("&lt;!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN""&gt;");</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;HTML&gt;");</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&nbsp;&lt;HEAD&gt;&lt;TITLE&gt;A Servlet&lt;/TITLE&gt;&lt;/HEAD&gt;");</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&nbsp;&lt;BODY&gt;");</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.print("&nbsp;&nbsp;&nbsp; This is ");</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.print(this.getClass());</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println(", using the POST method");</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&nbsp;&lt;/BODY&gt;");</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;/HTML&gt;");</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.flush();</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.close();</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String getServletInfo() {</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "This is my default servlet created by Eclipse";</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void init() throws ServletException {</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; public void saveSession(HttpServletRequest request)</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; {</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String testparam = request.getParameter("testparam");</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.getSession().setAttribute("testAttribute", testparam);</p>
<p style="margin-left: 21pt; text-align: left" align="left">&nbsp;&nbsp;&nbsp; }</p>
<p style="margin-left: 21pt; text-indent: 0cm; text-align: left" align="left">}</p>
<p style="margin-left: 21pt; text-indent: -21pt">[6]<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">修改项目</span>web.xml,<span style="font-family: 宋体">添加</span>servlet<span style="font-family: 宋体">映射</span></p>
<p style="margin-left: 21pt; text-indent: 0cm"><span style="font-family: 宋体">在</span>web.xml<span style="font-family: 宋体">中添加如下内容：</span></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet&gt;</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;LoginServlet&lt;/servlet-name&gt;</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;LoginServlet&lt;/servlet-class&gt;</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/servlet&gt;</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-mapping&gt;</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;LoginServlet&lt;/servlet-name&gt;</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/login&lt;/url-pattern&gt;</strong></p>
<p style="margin-left: 21pt; text-indent: 0cm"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/servlet-mapping&gt;</strong></p>
<p style="margin-left: 21pt; text-indent: -21pt">[7]<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">创建</span>Servlet<span style="font-family: 宋体">测试类</span></p>
<p style="margin-left: 21pt; text-indent: 0cm"><span style="font-family: 宋体">创建</span>TestLoginServlet,<span style="font-family: 宋体">代码如下：</span></p>
<p style="margin-left: 21pt">import java.io.IOException;</p>
<p style="margin-left: 21pt">import javax.servlet.ServletException;</p>
<p style="margin-left: 21pt">import junit.framework.Test;</p>
<p style="margin-left: 21pt">import junit.framework.TestSuite;</p>
<p style="margin-left: 21pt">import org.apache.cactus.ServletTestCase;</p>
<p style="margin-left: 21pt">import org.apache.cactus.WebRequest;</p>
<p style="margin-left: 21pt">import com.meterware.httpunit.WebResponse;</p>
<p style="margin-left: 21pt">public class TestLoginServlet extends ServletTestCase {</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public TestLoginServlet(String theName) {</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super(theName);</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static Test suite() {</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new TestSuite(TestLoginServlet.class);</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void beginSaveSessionOk(WebRequest webRequest) {</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; webRequest.addParameter("testparam", "it works!");</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void testSaveSessionOk() {</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LoginServlet servlet = new LoginServlet();</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; servlet.saveSession(request);</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assertEquals("it works!", session.getAttribute("testAttribute"));</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void endSaveSessionOk(WebResponse response) {</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("end save session ok");</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void beginDoGet(WebRequest webRequest) {</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; webRequest.addParameter("testparam", "it works!");</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void testDoGet() {</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LoginServlet servlet = new LoginServlet();</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; servlet.doGet(request, response);</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (ServletException e) {</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e) {</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin-left: 21pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin-left: 21pt; text-indent: 0cm">}</p>
<p style="margin-left: 21pt; text-indent: -21pt">[8]<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">复制测试结果报表样式</span></p>
<p style="margin-left: 21pt; text-indent: 0cm"><span style="font-family: 宋体">下载</span><a href="http://jakarta.apache.org/cactus/misc/cactus-report.xsl">http://jakarta.apache.org/cactus/misc/cactus-report.xsl</a></p>
<p style="margin-left: 21pt; text-indent: 0cm"><span style="font-family: 宋体">复制</span>cactus-report.xsl<span style="font-family: 宋体">到项目的根目录。</span></p>
<p style="margin-left: 21pt; text-indent: 0cm"><span style="font-family: 宋体">在测试结果显示时需要此样式。</span> </p>
<p style="margin-left: 21pt; text-indent: -21pt">[9]<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">验证目录结构</span></p>
<p style="margin-left: 21pt; text-indent: 0cm"><span style="font-family: 宋体">执行完以上操作，</span> <span style="font-family: 宋体">目录结构如下图：</span></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>.</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>|-- src</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>|&nbsp;&nbsp; |-- LoginServlet.java</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>|&nbsp;&nbsp; `-- TestLoginServlet.java</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>`-- WebRoot</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp; |-- cactus-report.xsl</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp; |-- index.jsp</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp; |-- META-INF</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; `-- MANIFEST.MF</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp; `-- WEB-INF</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;|-- cactus.properties---</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |-- classes</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |-- LoginServlet.class</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; `-- TestLoginServlet.class</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |-- lib</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |-- cactus.core.framework.uberjar.javaEE.14-1.8.1.jar</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |-- cactus.integration.ant-1.8.1.jar</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp; |-- cactus.integration.shared.api-1.8.1.jar</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |-- commons-codec-1.4.jar</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |-- commons-httpclient-3.1.jar</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |-- commons-logging-1.1.jar</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; |-- httpunit-1.6.jar</strong></p>
<p style="margin-left: 21pt; text-indent: 21.1pt"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; `-- junit-3.8.2.jar</strong></p>
<p style="margin-left: 21pt; text-indent: 0cm"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `-- web.xml</strong></p>
<p style="margin-left: 21pt; text-indent: -21pt">[10]<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp; </span><span style="font-family: 宋体">启动服务</span></p>
<p style="margin-left: 21pt; text-indent: -21pt">[11]<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp; </span><span style="font-family: 宋体">执行测试</span></p>
<p style="margin-left: 21pt; text-indent: 0cm"><span style="font-family: 宋体">在浏览器地址栏，输入：</span></p>
<p style="margin-left: 21pt; text-indent: 0cm"><a href="http://localhost:8080/ServletTestDemo/ServletTestRunner?suite=TestLoginServlet">http://localhost:8080/ServletTestDemo/ServletTestRunner?suite=TestLoginServlet</a><span style="font-family: 宋体">，回车，测试结果如下：<br />
</span></p>
<span style="font-family: 宋体">
<div class="e"><span class="b">&nbsp;</span> <span class="m">&lt;?</span><span class="pi">xml version="1.0" encoding="UTF-8" </span><span class="m">?&gt;</span> </div>
<div class="e">
<div class="c" style="margin-left: 1em; text-indent: -2em"><a class="b" onfocus="h()" onclick="return false" href="http://10.0.3.133:8080/ServletTestDemo/ServletTestRunner?suite=TestLoginServlet#">-</a> <span class="m">&lt;</span><span class="t">testsuites</span><span class="m">&gt;</span></div>
<div>
<div class="e">
<div class="c" style="margin-left: 1em; text-indent: -2em"><a class="b" onfocus="h()" onclick="return false" href="http://10.0.3.133:8080/ServletTestDemo/ServletTestRunner?suite=TestLoginServlet#">-</a> <span class="m">&lt;</span><span class="t">testsuite</span><span class="t"> name</span><span class="m">="</span><strong>TestLoginServlet</strong><span class="m">"</span><span class="t"> tests</span><span class="m">="</span><strong>2</strong><span class="m">"</span><span class="t"> failures</span><span class="m">="</span><strong>0</strong><span class="m">"</span><span class="t"> errors</span><span class="m">="</span><strong>0</strong><span class="m">"</span><span class="t"> time</span><span class="m">="</span><strong>0.524</strong><span class="m">"</span><span class="m">&gt;</span></div>
<div>
<div class="e">
<div style="margin-left: 1em; text-indent: -2em"><span class="b">&nbsp;</span> <span class="m">&lt;</span><span class="t">testcase</span> <span class="t">name</span><span class="m">="</span><strong>testSaveSessionOk</strong><span class="m">"</span><span class="t"> time</span><span class="m">="</span><strong>0.517</strong><span class="m">"</span><span class="m"> /&gt;</span> </div>
</div>
<div class="e">
<div style="margin-left: 1em; text-indent: -2em"><span class="b">&nbsp;</span> <span class="m">&lt;</span><span class="t">testcase</span> <span class="t">name</span><span class="m">="</span><strong>testDoGet</strong><span class="m">"</span><span class="t"> time</span><span class="m">="</span><strong>0.006</strong><span class="m">"</span><span class="m"> /&gt;</span> </div>
</div>
<div><span class="b">&nbsp;</span> <span class="m">&lt;/</span><span class="t">testsuite</span><span class="m">&gt;</span></div>
</div>
</div>
<div><span class="b">&nbsp;</span> <span class="m">&lt;/</span><span class="t">testsuites</span><span class="m">&gt;</span></div>
</div>
</div>
<p style="margin-left: 21pt; text-indent: 0cm"><br />
<br />
此测试结果是以</span>xml<span style="font-family: 宋体">的形式显示。</span></p>
<p style="margin-left: 21pt; text-indent: 0cm"><span style="font-family: 宋体">如果结构以</span>html<span style="font-family: 宋体">报表的形式显示，可以输入如下地址：</span></p>
<p style="margin-left: 21pt; text-indent: 0cm"><a href="http://10.0.3.133:8080/ServletTestDemo/ServletTestRunner?suite=TestLoginServlet&amp;xsl=cactus-report.xsl">http://10.0.3.133:8080/ServletTestDemo/ServletTestRunner?suite=TestLoginServlet&amp;xsl=cactus-report.xsl</a> </p>
<p style="margin-left: 21pt; text-indent: 0cm"><span style="font-family: 宋体">回车，结果如下：<br />
</span></p>
<h1>Unit Test Results</h1>
<p style="margin-left: 21pt; text-indent: -21pt">
<table width="100%">
    <tbody>
        <tr>
            <td align="left"></td>
            <td align="right">Designed for use with <a href="http://jakarta.apache.org/cactus/">Cactus</a>. </td>
        </tr>
    </tbody>
</table>
</p>
<hr size="1" />
<p style="margin-left: 21pt; text-indent: -21pt"></p>
<h2>Summary</h2>
<p style="margin-left: 21pt; text-indent: -21pt">
<table class="details" cellspacing="2" cellpadding="5" width="95%" border="0">
    <tbody>
        <tr valign="top">
            <th>Tests</th>
            <th>Failures</th>
            <th>Errors</th>
            <th>Success rate</th>
            <th>Time</th>
        </tr>
        <tr class="" valign="top">
            <td>2</td>
            <td>0</td>
            <td>0</td>
            <td>100.00%</td>
            <td>0.527</td>
        </tr>
    </tbody>
</table>
<table width="95%" border="0">
    <tbody>
        <tr>
            <td style="text-align: justify">Note: <em>failures</em> are anticipated and checked for with assertions while <em>errors</em> are unanticipated. </td>
        </tr>
    </tbody>
</table>
</p>
<hr align="left" width="95%" size="1" />
<p style="margin-left: 21pt; text-indent: -21pt"><a name="TestLoginServlet"></a></p>
<h3>TestCase TestLoginServlet</h3>
<p style="margin-left: 21pt; text-indent: -21pt">
<table class="details" cellspacing="2" cellpadding="5" width="95%" border="0">
    <tbody>
        <tr valign="top">
            <th>Name</th>
            <th>Status</th>
            <th width="80%">Type</th>
            <th noWrap>Time(s)</th>
        </tr>
        <tr class="" valign="top">
            <td>testSaveSessionOk</td>
            <td>Success</td>
            <td></td>
            <td>0.516</td>
        </tr>
        <tr class="" valign="top">
            <td>testDoGet</td>
            <td>Success</td>
            <td></td>
            <td>0.010</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p style="margin-left: 21pt; text-indent: -21pt"><a href="http://10.0.3.133:8080/ServletTestDemo/ServletTestRunner?suite=TestLoginServlet&amp;xsl=cactus-report.xsl#top">Back to top</a> <br />
[12]<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp; </span>&nbsp;</p>
 <img src ="http://www.blogjava.net/zhyiwww/aggbug/335459.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-10-18 15:30 <a href="http://www.blogjava.net/zhyiwww/archive/2010/10/18/335459.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CodePro studio 6.2.0 plugin for eclipse 的安装方法</title><link>http://www.blogjava.net/zhyiwww/archive/2010/09/08/331392.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Wed, 08 Sep 2010 05:15:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/09/08/331392.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/331392.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/09/08/331392.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/331392.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/331392.html</trackback:ping><description><![CDATA[【1】下载CodePro 6.2.0 Plugin for eclipse 3.5<br />
【2】下载eclipse 3.5版<br />
【3】解压CodePro Plugin for Eclipse3.5 到 D:\codepro_studio_6.2.0<br />
【4】解压eclipse 3.5到d:\eclipse<br />
【5】在eclipse目录下创建links目录<br />
【6】在links目录下创建文件com.instantiations.assist.eclipse.link<br />
内容为<br />
path=d:\codepro_studio_6.2.0<br />
<br />
【7】启动eclipse,输入license就可以了。<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/331392.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-09-08 13:15 <a href="http://www.blogjava.net/zhyiwww/archive/2010/09/08/331392.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu上Bugzilla安装和配置</title><link>http://www.blogjava.net/zhyiwww/archive/2010/06/03/322631.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Thu, 03 Jun 2010 08:19:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/06/03/322631.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/322631.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/06/03/322631.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/322631.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/322631.html</trackback:ping><description><![CDATA[<br />
主要步骤：<br />
【1】安装mysql<br />
# aptitude install mysql<br />
【2】安装perl<br />
#aptitude install perl<br />
【3】安装bugzilla<br />
#tar vxfz bugzilla-3.6.tar.gz -C /xx/bugzilla<br />
【4】配置buzilla<br />
# vi localconfig<br />
把里面数据库的配置修改正确<br />
比如mysql的用户名和密码等<br />
# ./checksetup.pl<br />
根据系统的提示，查找缺少的包，然后安装,不过perl的包需要用cpan安装。<br />
#aptitude install cpan<br />
最难装的可能是GD<br />
#cpan GD<br />
如果<br />
#./checksetup.pl<br />
提示所有的包都安装了，那么，bugzilla会提示你输入bugzilla的管理员邮箱和密码。一定要记住。<br />
【5】配置apache<br />
#cp /xx/bugzilla-3.6/*.cgi /usr/lib/cgi-bin/<br />
#cp /etc/apache2/sites-available/default
/etc/apache2/sites-available/bugzilla<br />
#ln -s /etc/apache2/sites-available/bugzilla
/etc/apache2/sites-enabled/bugzilla<br />
#vim /etc/apache2/sites-available/bugzilla<br />
内容：<br />
<br />
&lt;VirtualHost *:8081&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServerAdmin webmaster@localhost<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DocumentRoot /var/www/html/bugzilla<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Directory /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Options FollowSymLinks<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AllowOverride None<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Directory&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Directory /var/www/html/bugzilla/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddHandler cgi-script .cgi<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Options +Indexes +ExecCGI<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DirectoryIndex index.cgi<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AllowOverride Limit<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Directory&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Directory /usr/lib/cgi-bin&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AllowOverride None<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Order allow,deny<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Allow from all<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Directory&gt;<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ErrorLog /var/log/apache2/error.log<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Possible values include: debug, info, notice, warn, error,
crit,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # alert, emerg.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LogLevel warn<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CustomLog /var/log/apache2/access.log combined<br />
<br />
<br />
&lt;/VirtualHost&gt;<br />
<br />
虚拟机的端口需要提前配置:<br />
#vim /etc/apache/ports.conf<br />
内容：<br />
<br />
# bugzilla<br />
NameVirtualHost *:8081<br />
Listen 8081<br />
<br />
&lt;IfModule mod_ssl.c&gt;<br />
&nbsp;&nbsp;&nbsp; # SSL name based virtual hosts are not yet supported, therefore no<br />
&nbsp;&nbsp;&nbsp; # NameVirtualHost statement here<br />
&nbsp;&nbsp;&nbsp; Listen 443<br />
&lt;/IfModule&gt;<br />
<br />
【6】重启apache<br />
#/etc/init.d/apache2 restart<br />
&nbsp;<br />
【7】测试<br />
http://localhost:8081/<br />
如果出现bugzilla的页面，就说明你配置成功了。<br />
<br />
【8】邮件配置 <br />
用管理员的帐号登录进去<br />
在&#8220;管理&#8221;页面，配置&#8220;参数&#8221;，然后配置&#8220;邮件&#8221;，就和你配置outlook一样，配置smtp服务器，用户名，密码，确定，重启apache.<br />
就可以了。<br />
<br />
【9】邮件配置成功验证<br />
在首页，创建新用户，如果提示发邮件到用户邮箱，并能收到邮件，就说明邮件配置正却。<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/322631.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-06-03 16:19 <a href="http://www.blogjava.net/zhyiwww/archive/2010/06/03/322631.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安装bugzilla时gdlib-config问题的解决方法</title><link>http://www.blogjava.net/zhyiwww/archive/2010/06/01/322445.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Tue, 01 Jun 2010 06:07:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/06/01/322445.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/322445.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/06/01/322445.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/322445.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/322445.html</trackback:ping><description><![CDATA[<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8" />
<title></title>
<meta name="GENERATOR" content="OpenOffice.org 3.2  (Unix)" />
<style type="text/css">
<!-- @page { margin: 2cm }
P { margin-bottom: 0.21cm }
-->
</style>
<p style="margin-bottom: 0cm;"><font face="DejaVu Serif, serif">安装Bugzilla完成后，执行测试 <br />
</font></p>
<p style="margin-bottom: 0cm;"><font face="DejaVu Serif, serif"># .testserver.pl http://192.168.5.5/bugzilla时，出现如下错误<br />
</font></p>
<p style="margin-bottom: 0cm;"><font face="DejaVu Serif, serif">TEST-WARNING
Webserver is running under group id not matching
$webservergroup.<br />
This if the tests below fail, this is probably
the problem.<br />
Please refer to the web server configuration section
of the Bugzilla guide. <br />
If you are using virtual hosts or suexec,
this warning may not apply.<br />
TEST-OK Got padlock picture.<br />
TEST-OK
Webserver is executing CGIs via mod_cgi.<br />
TEST-OK Webserver is
preventing fetch of http://10.0.1.21:8081/localconfig.<br />
<font color="#0000ff"><strong>TEST-WARNING
Failed to run gdlib-config; can't compare GD versions.</strong></font><br />
TEST-OK
GD library generated a good PNG image.<br />
TEST-OK Chart library
generated a good PNG image.<br />
TEST-OK Template::Plugin::GD is
installed.<br />
</font></p>
<p style="margin-bottom: 0cm;"><font face="DejaVu Serif, serif"><br />
</font>解决方法：</p>
<p style="margin-bottom: 0cm;"># aptitude install libgd2-noxpm-dev -y&nbsp;</p>
<p style="margin-bottom: 0cm;">再测<br />
</p>
<p style="margin-bottom: 0cm;">#<font face="DejaVu Serif, serif"> .testserver.pl
http://192.168.5.5/bugzilla</font></p>
<p style="margin-bottom: 0cm;">TEST-OK Got padlock picture.<br />
TEST-OK Webserver is executing CGIs via mod_cgi.<br />
TEST-OK Webserver is preventing fetch of http://10.0.1.21:8081/localconfig.<br />
TEST-OK GD version 2.39, libgd version 2.0.36; Major versions match.<br />
TEST-OK GD library generated a good PNG image.<br />
TEST-OK Chart library generated a good PNG image.<br />
TEST-OK Template::Plugin::GD is installed.</p>
<p style="margin-bottom: 0cm;">就OK了。<br />
</p>
<p style="margin-bottom: 0cm;"><br />
<br />
</p>
<p style="margin-bottom: 0cm;"><br />
</p>
<p style="margin-bottom: 0cm;"><br />
</p>
<p style="margin-bottom: 0cm;"><br />
</p>
<img src ="http://www.blogjava.net/zhyiwww/aggbug/322445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-06-01 14:07 <a href="http://www.blogjava.net/zhyiwww/archive/2010/06/01/322445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>运行TestSuite</title><link>http://www.blogjava.net/zhyiwww/archive/2009/01/05/249923.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Mon, 05 Jan 2009 07:06:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2009/01/05/249923.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/249923.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2009/01/05/249923.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/249923.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/249923.html</trackback:ping><description><![CDATA[自己写了一个TestSuite,想进行联合测试，可以用run as junit却怎么也运行不了。<br />后来从网上找了些例子，可以用应用程序的方式来进行TestSuit测试<br />代码如下：<br /><br />public class AllTests {<br /><br />    public static Test suite() {<br />        TestSuite suite = new TestSuite(<br />                "Test for XXXX “);<br />        <br />        suite.addTestSuite(XmlUtilTest.class);<br />        suite.addTestSuite(HibernateSessionFactoryTest.class);<br />        suite.addTestSuite(SsFactoryTest.class);<br />        suite.addTestSuite(TcccDaoTest.class);<br />        suite.addTestSuite(TcddDaoTest.class);<br />        suite.addTestSuite(TiddDaoTest.class);<br />        <br />        TestResult rst = new TestResult();<br />        suite.run(rst);<br />        <br />//        System.out.println(rst.errorCount()+rst.failureCount()+rst.runCount());<br />        <br />        if(rst.wasSuccessful()){<br />            System.out.println("ok");<br />        }<br />        <br />        return suite;<br />    }<br /><br />    public static void main(String[] args) {<br />        suite();<br />    }<br /><br />}<br /><br />然后按照应用程序来运行就可以了。<br />运行的结果都保存在TestResult里面。<br /><br /><br /><img src ="http://www.blogjava.net/zhyiwww/aggbug/249923.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2009-01-05 15:06 <a href="http://www.blogjava.net/zhyiwww/archive/2009/01/05/249923.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DOS中如何删除文件夹</title><link>http://www.blogjava.net/zhyiwww/archive/2006/09/20/70855.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Wed, 20 Sep 2006 09:24:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2006/09/20/70855.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/70855.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2006/09/20/70855.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/70855.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/70855.html</trackback:ping><description><![CDATA[可以使用rd命令。<br />如果目录是空的，那么可以用<br /><strong> rd 目录<br /></strong>删除目录。如下图：<br /><img height="289" alt="dos-rd-dir-s.JPG" src="http://www.blogjava.net/images/blogjava_net/zhyiwww/dos/dos-rd-dir-s.JPG" width="650" border="0" /><br />输入Y之后系统就会删除整个目录。<br /><br />如果目录是非空，那么使用<br /><strong>rd 目录 /s<br /></strong>来删除目录（目录下的文件也会删除一同）。<br />如果没有加/s,那么系统会给出目录非空的提示。如下图：<br /><img height="226" alt="dos-rd-dir-no-s.JPG" src="http://www.blogjava.net/images/blogjava_net/zhyiwww/dos/dos-rd-dir-no-s.JPG" width="648" border="0" /><br /><img src ="http://www.blogjava.net/zhyiwww/aggbug/70855.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2006-09-20 17:24 <a href="http://www.blogjava.net/zhyiwww/archive/2006/09/20/70855.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JUnit 最佳实践（转载）</title><link>http://www.blogjava.net/zhyiwww/archive/2006/06/07/51186.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Wed, 07 Jun 2006 09:49:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2006/06/07/51186.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/51186.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2006/06/07/51186.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/51186.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/51186.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JUnit best practice                                                                2006-5-31                                                                          ...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhyiwww/archive/2006/06/07/51186.html'>阅读全文</a><img src ="http://www.blogjava.net/zhyiwww/aggbug/51186.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2006-06-07 17:49 <a href="http://www.blogjava.net/zhyiwww/archive/2006/06/07/51186.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Cactus实例讲解(转载)</title><link>http://www.blogjava.net/zhyiwww/archive/2006/06/07/51184.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Wed, 07 Jun 2006 09:46:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2006/06/07/51184.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/51184.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2006/06/07/51184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/51184.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/51184.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="558" border="0">
				<tbody>
						<tr>
								<td valign="center" align="right" colspan="2" height="32">
										<div class="style7" align="center">
												<span style="FONT-SIZE: 12pt">
														<b>Cactus实例讲解</b>
												</span>
										</div>
								</td>
						</tr>
						<tr>
								<td valign="center" align="right" bgcolor="#000000" colspan="2" height="1">
								</td>
						</tr>
						<tr>
								<td valign="center" align="right" colspan="2" height="20">
										<div align="center"> </div>
								</td>
						</tr>
						<tr>
								<td valign="top" align="right" colspan="2" height="10">
								</td>
						</tr>
						<tr>
								<td valign="top" align="right" width="2%" height="10">
										<div align="left">
										</div>
								</td>
								<td valign="top" align="right" width="98%" bgcolor="#ffffff">
										<div class="daxiao14" align="left">
												<p class="style2">Cactus简介</p>
												<p>
														<strong>．　简介 </strong>
												</p>
												<p>Cactus实现了对JUnit测试框架的无缝扩展，可以方便地测试服务端应用程序。Cactus可以在下面几种情况下使用：</p>
												<ul>
														<li>测试Servlet以及任何使用了像HttpServletRequest，HttpServletResponse，……这样的对象的代码。使用ServletTestCase。 
</li>
														<li>测试Filter以及任何使用了像FilterConfig，……这样的对象的代码。使用FilterTestCase。 
</li>
														<li>测试JSP 。使用ServletTestCase或JspTestCase。 
</li>
														<li>测试Taglibs以及任何使用了像PageContext，……这样的对象的代码。使用JspTestCase。 
</li>
														<li>测试EJB。ServletTestCase或JspTestCase或FilterTestCase。 </li>
												</ul>
												<p>Cactus的使用也是非常简单的，你写的测试类只需继承ServletTestCase或者JspTestCase、FilterTestCase（它们都继承了JUnit的TestCase）。写好测试代码后需要启动web容器，然后执行测试代码。在下面的章节中我们将通过例子向你详细讲解。</p>
												<p>Cactus项目Apache Jakarta Commons的一个子项目，网址是：<a href="http://jakarta.apache.org/commons/cactus/"><font color="#000000">http://jakarta.apache.org/commons/cactus/</font></a>。</p>
												<p>
														<strong>．　TestCase框架</strong>
												</p>
												<p>在Cactus下，我们写的TestCase与JUnit有所不同，先看一段代码，如下：</p>　　　　　　　public class TestSample extendsServletTestCase/JspTestCase/FilterTestCase {<br />　　　　　　　public TestSample (String testName) {<br />　　　　　　　super(testName);<br />　　　　　　　}<br />　　　　　　　public void setUp() {<br />　　　　　　　}<br />　　　　　　　public void tearDown() {<br />　　　　　　　}<br />　　　　　　　public void beginXXX(WebRequest theRequest) {<br />　　　　　　　}<br />　　　　　　　public void testXXX() {<br />　　　　　　　}<br />　　　　　　　public void endXXX(WebResponse theResponse) {<br />　　　　　　　}<br /><p>上面是一个Cactus测试类的完整代码框架，其中的extends部分需要按你所测试的不同目标来继承不同的类（简介中有所描述）。</p><p>另外我们注意到两个新的方法beginXXX和endXXX的，这两个方法分别会在testXXX执行前和执行后执行，它们和setUp、tearDown不同的是beginXXX和endXXX会在相应的testXXX前执行，而setUp和tearDown则在每个testXXX方法前都会执行。另外beginXXX和endXXX是客户端代码，所以在这两个方法里是无法使用request这样的服务端对象的。</p><p>对于endXXX方法需要另加说明的是，在Cactus v1.1前（包括v1.1），它的形式是这样的public void endXXX(HttpURLConnection theConnection)，而在Cactus v1.2开始它的形式有两种可能：</p><ul><li>public void endXXX(org.apache.cactus.WebResponse theResponse)； 
</li><li>public void endXXX(com.meterware.httpunit.WebResponse theResponse)； </li></ul><p>可以看到区别在于引用的包不同，为什么会这样的呢？因为在v1.2开始Cactus集成了HttpUnit这个组件。如果你熟悉HttpUnit这个组件，我想应该明白为什么要集成HttpUnit。下面我们来看一段代码开比较一下两者的区别：</p><p align="left">public void endXXX(org.apache.cactus.WebResponse theResponse) {</p><p align="left">String content = theResponse.getText();</p><p align="left">assertEquals(content, "&lt;html&gt;&lt;body&gt;&lt;h1&gt;Hello world!&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;");</p><p align="left">}</p><p align="left">public void endXXX(com.meterware.httpunit.WebResponse theResponse) {</p><p align="left">WebTable table = theResponse.getTables()[0];</p><p align="left">assertEquals("rows", 4, table.getRowCount());</p><p align="left">assertEquals("columns", 3, table.getColumnCount());</p><p align="left">assertEquals("links", 1, table.getTableCell(0, 2).getLinks().length);</p><p align="left">}</p><p>当然，在实际应用中你需要根据不同的需要来选择不同的endXXX。两个WebResponse的差别可以参见两者各自的API Doc，这里就不再多说了。</p><p class="style2">如何在Cactus里写测试</p><p><strong>．　写测试代码</strong></p><p>首先，我们给出被测类的代码，是一个Servlet：</p><p>public class SampleServlet extends HttpServlet {</p><p>public void doGet(HttpServletRequest theRequest,</p><p>HttpServletResponse theResponse) throws IOException {</p><p>PrintWriter pw = theResponse.getWriter();</p><p>theResponse.setContentType("text/html");</p><p>pw.print("&lt;html&gt;&lt;head/&gt;&lt;body&gt;");</p><p>pw.print("A GET request");</p><p>pw.print("&lt;/body&gt;&lt;/html&gt;");</p><p>}</p><p>public String checkMethod(HttpServletRequest theRequest) {</p><p>return theRequest.getMethod();</p><p>}</p><p>}</p><p>Cactus中的测试类框架已经在上面给出。下面来看一下例子，例子是从中Cactus自带的实例中抽取的一部分，如下：</p><p>public class TestSampleServlet extends ServletTestCase {</p><p>public void testReadServletOutputStream() throws IOException {</p><p>SampleServlet servlet = new SampleServlet();</p><p>servlet.doGet(request, response);</p><p>}</p><p>public void endReadServletOutputStream(WebResponse theResponse)</p><p>throws IOException {</p><p>String expected = "&lt;html&gt;&lt;head/&gt;&lt;body&gt;A GET request&lt;/body&gt;&lt;/html&gt;";</p><p>String result = theResponse.getText();</p><p>assertEquals(expected, result);</p><p>}</p><p>public void beginPostMethod(WebRequest theRequest) {</p><p>theRequest.addParameter("param", "value", WebRequest.POST_METHOD);</p><p>}</p><p>public void testPostMethod() {</p><p>SampleServlet servlet = new SampleServlet();</p><p>assertEquals("POST", servlet.checkMethod(request));</p><p>assertEquals("value", request.getParameter("param"));</p><p>} </p><p>}</p><p>第一个方法testReadServletOutputStream，调用doGet，相当于在客户端提交请求，然后在Servlet处理后会产生一个回馈，所以，在endReadServletOutputStream方法里，我们通过调用response的相应方法判断回馈是否符合预期结果。</p><p>第二个方法testPostMethod，在这之前有一个beginPostMethod，在这个方法里我们以POST方式往request里增加一个表单数据param，值为”value”。下面在testPostMethod我们就要验证表单数据是否以POST方式提交到了服务端的Servlet里，所以，我们看到了两个assertEquals，分别进行了判断。在这里我们要注意到beginPostMethod方法中的theRequest和testPostMethod中的request的区别，在前面我们已经提到过，beginPostMethod是在客户端执行的，所以它方法内的所有操作事实上是模拟页面操作的，比如上面的设置表单数据，而testPostMethod是服务端执行的，其中的request也是服务端的。</p><span class="style2"><strong>配置cactus.properties和web.xml</strong></span><p><strong>cactus.properties</strong></p><ul><li>cactus.contextURL </li></ul><p>这个属性是必须的，它指定了web应用的访问地址</p><p>例：cactus.contextURL = <a href="http://localhost:8080/test"><font color="#000000">http://localhost:8080/test</font></a></p><ul><li>cactus.servletRedirectorName </li></ul><p>可选，当测试类继承ServletTestCase时用于指定Cactus Servlet Redirector的映射名称。默认：ServletRedirector</p><p>例：cactus.servletRedirectorName = ServletRedirector</p><ul><li>cactus.jspRedirectorName </li></ul><p>可选，当测试类继承ServletTestCase时用于指定Cactus Jsp Redirector的映射名称。默认：ServletRedirector</p><p>例：cactus.jspRedirectorName = JspRedirector</p><ul><li>cactus.<a class="style3">filterRedirectorName </a>(For J2EE API 1.3 only) </li></ul><p>可选，当测试类继承ServletTestCase时用于指定Cactus Filter Redirector的映射名称。默认：ServletRedirector</p><p>例：cactus.filterRedirectorName = FilterRedirector</p><p>Cactus.properties你可以放置在WEB-INF/classes/下。</p><p><strong>web.xml</strong></p><p>在web.xml里要为相应的测试类指定相应的Cactus Redirector。</p><p>ServletTestCase对应org.apache.cactus.server.ServletTestRedirector</p><p>JspTestCase对应/jspRedirector.jsp</p><p>FilterTestCase对应org.apache.cactus.server.FilterTestRedirector</p><p>&lt;web-app&gt;</p><p>&lt;filter&gt;</p><p>&lt;filter-name&gt;FilterRedirector&lt;/filter-name&gt;</p><p>&lt;filter-class&gt;org.apache.cactus.server.FilterTestRedirector&lt;/filter-class&gt;</p><p>&lt;/filter&gt;</p><p>&lt;filter-mapping&gt;</p><p>&lt;filter-name&gt;FilterRedirector&lt;/filter-name&gt;</p><p>&lt;url-pattern&gt;/FilterRedirector&lt;/url-pattern&gt;</p><p>&lt;/filter-mapping&gt;</p><p>&lt;servlet&gt;</p><p>&lt;servlet-name&gt;ServletRedirector&lt;/servlet-name&gt;</p><p>&lt;servlet-class&gt;org.apache.cactus.server.ServletTestRedirector&lt;/servlet-class&gt;</p><p>&lt;/servlet&gt;</p><p>&lt;servlet&gt;</p><p>&lt;servlet-name&gt;JspRedirector&lt;/servlet-name&gt;</p><p>&lt;jsp-file&gt;<a class="style3">/jspRedirector.jsp</a>&lt;/jsp-file&gt;</p><p>&lt;/servlet&gt;</p><p>&lt;servlet-mapping&gt;</p><p>&lt;servlet-name&gt;ServletRedirector&lt;/servlet-name&gt;</p><p>&lt;url-pattern&gt;/ServletRedirector&lt;/url-pattern&gt;</p><p>&lt;/servlet-mapping&gt;</p><p>&lt;servlet-mapping&gt;</p><p>&lt;servlet-name&gt;JspRedirector&lt;/servlet-name&gt;</p><p>&lt;url-pattern&gt;/JspRedirector&lt;/url-pattern&gt;</p><p>&lt;/servlet-mapping&gt;</p><p>&lt;/web-app&gt;</p><p>如果你的测试类继承了JspTestCase则需要将jspRedirector.jsp文件放置到你在web.xml中指定的路径里。</p><p class="style2">安装说明</p><ul><li>在使用Cactus时，strutstest.jar还需要有下列包的支持。包可放置在WEB-INF/lib下 </li></ul><p>如下：</p><ul><ul><li><a class="style3">Client</a>端，需要如下包 </li></ul></ul><p align="left">junit.jar</p><p align="left">servlet.jar</p><p align="left">cactus.jar</p><p align="left">httpclient.jar</p><p align="left">commons-logging.jar</p><p align="left">httpunit.jar，Tidy.jar，xerces.jar（可选，如果你集成了httpunit的话就需要，也就是在endXXX中使用了httpunit）</p><ul><ul><li>Server端（也就是web容器）需要如下包 </li></ul></ul><p align="left">cactus.jar</p><p align="left">junit.jar</p><p align="left">aspectjrt.jar</p><p align="left">commons-logging.jar</p><ul><li>写好测试代码后将class放置在WEB-INF/classes下 
</li><li>被测代码也放置在WEB-INF/classes下 
</li><li>写好cactus.properties和web.xml两个配置文件 
</li><li>启动web容器 
</li><li>运行测试代码 </li></ul></div>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/zhyiwww/aggbug/51184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2006-06-07 17:46 <a href="http://www.blogjava.net/zhyiwww/archive/2006/06/07/51184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JUnit中如何测试异常(转载)</title><link>http://www.blogjava.net/zhyiwww/archive/2006/06/06/50766.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Tue, 06 Jun 2006 06:23:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2006/06/06/50766.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/50766.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2006/06/06/50766.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/50766.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/50766.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="558" border="0">
				<tbody>
						<tr>
								<td valign="center" align="right" colspan="2" height="32">
										<div class="style7" align="center">
												<span style="FONT-SIZE: 12pt">
														<b>JUnit中如何测试异常</b>
												</span>
										</div>
								</td>
						</tr>
						<tr>
								<td valign="center" align="right" bgcolor="#000000" colspan="2" height="1">
								</td>
						</tr>
						<tr>
								<td valign="center" align="right" colspan="2" height="20">
										<div align="center"> </div>
								</td>
						</tr>
						<tr>
								<td valign="top" align="right" colspan="2" height="10">
								</td>
						</tr>
						<tr>
								<td valign="top" align="right" width="2%" height="10">
										<div align="left">
										</div>
								</td>
								<td valign="top" align="right" width="98%" bgcolor="#ffffff">
										<div class="daxiao14" align="left">
												<p>很多时候，我们要写一些单元测试来测试我们程序是否能正确触发异常。<br />　　比如下面的例子中，我们就写了一个test case来测试一个Email验证类EmailAddrValidator，这个类有一个doValidate(email)方法可以验证email是否合法，如果不合法则会抛出ValidationException异常。因此我们写了两个方法来进行单元测试，前一个方法testDoValidate用来测试正常值，后一个方法testDoValidateException用来测试对错误的email格式是否能正确触发异常。<br />　　这个例子的关键是方法testDoValidateException(String email) 。<br /><br />import junit.framework.TestCase;<br /><br />public class TestEmailAddrValidator extends TestCase {<br />    EmailAddrValidator validator = new EmailAddrValidator();<br /><br />    public void testDoValidate() throws ValidationException {<br />        validator.doValidate("glchengang@163.com", null);<br />        validator.doValidate("glchen.gang@163.com", null);<br />        validator.doValidate("glchen_gang@163.com", null);<br />        validator.doValidate("glchen.gang@163_tom.com", null);<br />    }<br /><br />    public void testDoValidateException() {<br />        testDoValidateException("@b.c");<br />        testDoValidateException("a@.c");<br />        testDoValidateException("a@b.");<br />        testDoValidateException("@.c");<br />        testDoValidateException("@...");<br />        testDoValidateException(" ");<br />        testDoValidateException(null);<br />    }<br /><br />    private void testDoValidateException(String email) {<br />        try {<br />            validator.doValidate(email, null);<br />            fail("末抛出异常");<br />        } catch (ValidationException e) {<br />            assertTrue(true);<br />        }<br />    }<br />}<br /><br /><br /><br />-----------------------------------------<br />注：在这里Locale 参数并没有用到。<br />import java.util.Locale;<br /><br />import com.hygensoft.common.configure.ConfigureObject;<br /><br />public class EmailAddrValidator{<br /><br />    protected static final String ERROR_CODE_INVALID_EMAIL_ADDR = "INVALID_EMAIL_ADDR";<br />    protected static final String ERROR_CODE_INVALID_INPUT = "INVALID_INPUT_OBJECT";<br /><br />    public Object doValidate(Object input, Locale locale) throws ValidationException {<br />        if (!(input instanceof String)) {<br />            throw new ValidationException(ERROR_CODE_INVALID_INPUT, input);<br />        }<br />        String inputStr = (String) input;<br />        int idx = inputStr.indexOf('@');<br />        if (idx == -1 || idx == 0) {<br />            throw new ValidationException(ERROR_CODE_INVALID_INPUT, input);<br />        }<br />        int idx2 = inputStr.indexOf('.', idx);<br />        if (idx2 == -1 || idx2 == idx + 1) {<br />            throw new ValidationException(ERROR_CODE_INVALID_INPUT, input);<br />        }<br />        if (inputStr.endsWith(".")) {<br />            throw new ValidationException(ERROR_CODE_INVALID_INPUT, input);<br />        }<br />        return input;<br />    }<br /><br />    /* (non-Javadoc)<br />     * @see com.hygensoft.common.configure.Configurable#initialize(com.hygensoft.common.configure.ConfigureObject)<br />     */<br />    public void initialize(ConfigureObject conf) {}<br /><br />}</p>
										</div>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/zhyiwww/aggbug/50766.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2006-06-06 14:23 <a href="http://www.blogjava.net/zhyiwww/archive/2006/06/06/50766.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java开源测试工具汇总(转载)</title><link>http://www.blogjava.net/zhyiwww/archive/2006/06/06/50765.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Tue, 06 Jun 2006 06:20:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2006/06/06/50765.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/50765.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2006/06/06/50765.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/50765.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/50765.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="558" border="0">
				<tbody>
						<tr>
								<td valign="center" align="right" colspan="2" height="32">
										<div class="style7" align="center">
												<span style="FONT-SIZE: 12pt">
														<b>Java开源测试工具汇总</b>
												</span>
										</div>
								</td>
						</tr>
						<tr>
								<td valign="center" align="right" bgcolor="#000000" colspan="2" height="1">
								</td>
						</tr>
						<tr>
								<td valign="center" align="right" colspan="2" height="20">
										<div align="center">文章出处：转载 作者：不详 发布时间：2006-01-19</div>
								</td>
						</tr>
						<tr>
								<td valign="top" align="right" colspan="2" height="10">
								</td>
						</tr>
						<tr>
								<td valign="top" align="right" width="2%" height="10">
										<div align="left">
										</div>
								</td>
								<td valign="top" align="right" width="98%" bgcolor="#ffffff">
										<div class="daxiao14" align="left">JUnit   <br />JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架（regression testing framework）。Junit测试是程序员测试，即所谓白盒测试，因为程序员知道被测试的软件如何（How）完成功能和完成什么样（What）的功能。Junit是一套框架，继承TestCase类，就可以用Junit进行自动测试了。 <br /><br /><a href="http://www.junit.org/" target="_blank"><font color="#003366" size="2">http://www.junit.org/</font></a><br /><br />Cactus   <br />Cactus是一个基于JUnit框架的简单测试框架，用来单元测试服务端Java代码。Cactus框架的主要目标是能够单元测试服务端的使用Servlet对象的Java方法如HttpServletRequest,HttpServletResponse,HttpSession等<br /><br /><a href="http://jakarta.apache.org/cactus/" target="_blank"><font color="#003366" size="2">http://jakarta.apache.org/cactus/</font></a><br /><br />Abbot   <br />Abbot是一个用来测试Java GUIs的框架。用简单的基于XML的脚本或者Java代码，你就可以开始一个GUI。<br /><br /><a href="http://abbot.sourceforge.net/" target="_blank"><font color="#003366" size="2">http://abbot.sourceforge.net/</font></a><br /><br />JUnitPerf   <br />Junitperf实际是junit的一个decorator，通过编写用于junitperf的单元测试，我们也可使测试过程自动化。<br /><br /><a href="http://www.clarkware.com/software/JUnitPerf.html" target="_blank"><font color="#003366" size="2">http://www.clarkware.com/software/JUnitPerf.html</font></a><br /><br />DbUnit   <br />DbUnit是为数据库驱动的项目提供的一个对JUnit 的扩展，除了提供一些常用功能，它可以将你的数据库置于一个测试轮回之间的状态。 <br /><br /><a href="http://dbunit.sourceforge.net/" target="_blank"><font color="#003366" size="2">http://dbunit.sourceforge.net/</font></a><br /><br />Mockrunner   <br />Mockrunner用在J2EE环境中进行应用程序的单元测试。它不仅支持Struts actions, servlets，过滤器和标签类还包括一个JDBC和一个JMS测试框架，可以用于测试基于EJB的应用程序。<br /><br /><a href="http://mockrunner.sourceforge.net/index.html" target="_blank"><font color="#003366" size="2">http://mockrunner.sourceforge.net/index.html</font></a><br /><br />DBMonster   <br />DBMonster是一个用生成随机数据来测试SQL数据库的压力测试工具。<br /><br /><a href="http://dbmonster.kernelpanic.pl/" target="_blank"><font color="#003366" size="2">http://dbmonster.kernelpanic.pl/</font></a><br /><br />MockEJB   <br />MockEJB是一个不需要EJB容器就能运行EJB并进行测试的轻量级框架。<br /><br /><a href="http://mockejb.sourceforge.net/" target="_blank"><font color="#003366" size="2">http://mockejb.sourceforge.net/</font></a><br /><br />StrutsTestCase   <br />StrutsTestCase 是Junit TestCase类的扩展，提供基于Struts框架的代码测试。StrutsTestCase同时提供Mock 对象方法和Cactus方法用来实际运行Struts ActionServlet，你可以通过运行servlet引擎来测试。因为StrutsTestCase使用ActionServlet控制器来测试你的代码，因此你不仅可以测试Action对象的实现，而且可以测试mappings，from beans以及forwards声明。StrutsTestCase不启动servlet容器来测试struts应用程序（容器外测试）也属于Mock对象测试，但是与EasyMock不同的是，EasyMock是提供了创建Mock对象的API，而StrutsTest则是专门负责测试Struts应用程序的Mock对象测试框架。 <br /><br /><a href="http://strutstestcase.sourceforge.net/" target="_blank"><font color="#003366" size="2">http://strutstestcase.sourceforge.net/</font></a><br /><br />JFCUnit   <br />JFCUnit使得你能够为Java偏移应用程序编写测试例子。它为从用代码打开的窗口上获得句柄提供了支持；为在一个部件层次定位部件提供支持；为在部件中发起事件（例如按一个按钮）以及以线程安全方式处理部件测试提供支持。<br /><br /><a href="http://jfcunit.sourceforge.net/" target="_blank"><font color="#003366" size="2">http://jfcunit.sourceforge.net/</font></a><br /><br />JTestCase   <br />JTestCase 使用XML文件来组织多测试案例数据，声明条件（操作和期望的结果），提供了一套易于使用的方法来检索XML中的测试案例，按照数据文件的定义来声明结果。<br /><br /><a href="http://jtestcase.sourceforge.net/" target="_blank"><font color="#003366" size="2">http://jtestcase.sourceforge.net/</font></a><br /><br />SQLUnit   <br />SQLUnit是一个单元测试框架，用于对数据库存储过程进行回归测试。用 Java/JUnit/XML开发。 <br /><br /><a href="http://sqlunit.sourceforge.net/" target="_blank"><font color="#003366" size="2">http://sqlunit.sourceforge.net</font></a><br /><br />JTR   <br />JTR (Java Test Runner)是一个开源的基于反转控制(IOC)的J2EE测试框架。它允许你构建复杂的J2EE测试套件(Test Suites)并连到应用服务器执行测试,可以包括多个测试实例。JTR的licensed是GPL协议。<br /><br /><a href="http://jtrunner.sourceforge.net/" target="_blank"><font color="#003366" size="2">http://jtrunner.sourceforge.net/</font></a><br /><br />Marathon   <br />Marathon是一个针对使用Java/Swing开发GUI应用程序的测试框架，它由recorder, runner 和 editor组成，测试脚本是python代码。Marathon的焦点是放在最终用户的测试上。<br /><br /><a href="http://marathonman.sourceforge.net/" target="_blank"><font color="#003366" size="2">http://marathonman.sourceforge.net</font></a><br /><br />TestNG   <br />TestNG是根据JUnit 和 NUnit思想而构建的一个测试框架，但是TestNG增加了许多新的功能使得它变得更加强大与容易使用比如：<br />*支持JSR 175注释（JDK 1.4利用JavaDoc注释同样也支持）<br />*灵活的Test配置<br />*支持默认的runtime和logging JDK功能<br />*强大的执行模型（不再TestSuite）<br />*支持独立的测试方法。<br /><br /><a href="http://testng.org/" target="_blank"><font color="#003366" size="2">http://testng.org/</font></a><br /><br />Surrogate Test framework   <br />Surrogate Test framework是一个值得称赞单元测试框架，特别适合于大型，复杂Java系统的单元测试。这个框架能与JUnit,MockEJB和各种支持模拟对象（mock object ）的测试工具无缝给合。这个框架基于AspectJ技术。<br /><a href="http://surrogate.sourceforge.net/" target="_blank"><font color="#003366" size="2">http://surrogate.sourceforge.net</font></a><br /><br />MockCreator   <br />MockCreator可以为给定的interface或class生成模拟对象（Mock object）的源码。<br /><br /><a href="http://mockcreator.sourceforge.net/" target="_blank"><font color="#003366" size="2">http://mockcreator.sourceforge.net/</font></a><br /><br />jMock   <br />jMock利用mock objects思想来对Java code进行测试。jMock具有以下特点:容易扩展，让你快速简单地定义mock objects,因此不必打破程序间的关联，让你定义灵活的超越对象之间交互作用而带来测试局限，减少你测试地脆弱性。<br /><br /><a href="http://www.jmock.org/" target="_blank"><font color="#003366" size="2">http://www.jmock.org/</font></a><br /><br />EasyMock   <br />EasyMock为Mock Objects提供接口并在JUnit测试中利用Java的proxy设计模式生成它们的实例。EasyMock最适合于测试驱动开发。<br /><br /><a href="http://www.easymock.org/" target="_blank"><font color="#003366" size="2">http://www.easymock.org/</font></a><br /><br />The Grinder   <br />The Grinder是一个负载测试框架。在BSD开源协议下免费使用。<br /><br /><a href="http://grinder.sourceforge.net/" target="_blank"><font color="#003366" size="2">http://grinder.sourceforge.net/</font></a><br /><br />XMLUnit   <br />XMLUnit不仅有Java版本的还有.Net版本的。Java开发的XMLUnit提供了两个JUnit 扩展类XMLAssert和XMLTestCase,和一组支持的类。这些类可以用来比较两张XML之间的不同之处，展示XML利用XSLT来,校验XML,求得XPath表达式在XML中的值,遍历XML中的某一节点利DOM展开,<br /><br /><a href="http://xmlunit.sourceforge.net/" target="_blank"><font color="#003366" size="2">http://xmlunit.sourceforge.net/</font></a><br /><br />Jameleon   <br />Jameleon一个自动化测试工具。它被用来测试各种各样的应用程序，所以它被设计成插件模式。为了使整个测试过程变得简单Jameleon提供了一个GUI,因此Jameleon实现了一个Swing 插件。<br /><br /><a href="http://jameleon.sourceforge.net/index.html" target="_blank"><font color="#003366" size="2">http://jameleon.sourceforge.net/index.html</font></a><br /><br />J2MEUnit   <br />J2MEUnit是应用在J2ME应用程序的一个单元测试框架。它基于JUnit.<br /><br /><a href="http://j2meunit.sourceforge.net/" target="_blank"><font color="#003366" size="2">http://j2meunit.sourceforge.net/</font></a><br /><br />Jetif   <br />Jetif是一个用纯Java实现的回归测试框架。它为Java程序单元测试以及功能测试提供了一个简单而且可 伸缩的架构，可以用于个人开发或企业级开发的测试。它容易使用，功能强大，而且拥有一些企业级测试的重要功能。Jetif来源于JUnit, JTestCase以及TestNG的启发，有几个基本的概念直接来自于JUnit， 比如说断言机制，Test Listener的概念，因此从JUnit转到Jetif是非常容易的。<br /><a href="http://jetif.sourceforge.net/" target="_blank"><font color="#003366" size="2">http://jetif.sourceforge.net/</font></a><br /><br />GroboUtils   <br />GroboUtils使得扩展Java测试变得可能。它包括用在Java不同方面测试的多个子项目。在GroboUtils中最常被到的工具是:多线程测试(multi-threaded tests),整体单元测试(hierarchial unit tests),代码覆盖工具(code coverage tool)。<br /><a href="http://groboutils.sourceforge.net/" target="_blank"><font color="#003366" size="2">http://groboutils.sourceforge.net/</font></a><br /><br />Testare   <br />TESTARE是用来简化分布式应用程序(比如:在SERVLETS,JMS listeners, CORBA ORBs或RMI环境下)测试开发过程的一个测试框架.<br /><a href="https://testare.dev.java.net/" target="_blank"><font color="#003366" size="2">https://testare.dev.java.net/</font></a><br /></div>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/zhyiwww/aggbug/50765.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2006-06-06 14:20 <a href="http://www.blogjava.net/zhyiwww/archive/2006/06/06/50765.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>