﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-我的漫漫程序之旅-文章分类-软件测试</title><link>http://www.blogjava.net/supercrsky/category/27522.html</link><description>专注于JavaWeb开发</description><language>zh-cn</language><lastBuildDate>Mon, 05 Nov 2012 23:01:45 GMT</lastBuildDate><pubDate>Mon, 05 Nov 2012 23:01:45 GMT</pubDate><ttl>60</ttl><item><title>Cactus容器测试入门</title><link>http://www.blogjava.net/supercrsky/articles/205106.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Sat, 31 May 2008 17:11:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/205106.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/205106.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/205106.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/205106.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/205106.html</trackback:ping><description><![CDATA[此文参考: <font style="background-color: #f4f4f4">http://jakarta.apache.org/cactus/integration/howto_tomcat.html</font><br />
<br />
我们在web.xml中的webapp之间加入:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">ServletRedirector</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.apache.cactus.server.ServletTestRedirector</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">param1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">value1&nbsp;used&nbsp;for&nbsp;testing</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">ServletTestRunner</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.apache.cactus.server.runner.ServletTestRunner</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
加入mapping:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">ServletRedirector</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/ServletRedirector</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">ServletTestRunner</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/ServletTestRunner</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
<br />
然后我们写一个简单的Servlet来进行测试:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.HttpServlet;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.HttpServletRequest;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SampleServlet&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;HttpServlet<br />
<img id="Codehighlighter1_133_332_Open_Image" onclick="this.style.display='none'; Codehighlighter1_133_332_Open_Text.style.display='none'; Codehighlighter1_133_332_Closed_Image.style.display='inline'; Codehighlighter1_133_332_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_133_332_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_133_332_Closed_Text.style.display='none'; Codehighlighter1_133_332_Open_Image.style.display='inline'; Codehighlighter1_133_332_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_133_332_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_133_332_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;saveToSession(HttpServletRequest&nbsp;request)<br />
<img id="Codehighlighter1_197_330_Open_Image" onclick="this.style.display='none'; Codehighlighter1_197_330_Open_Text.style.display='none'; Codehighlighter1_197_330_Closed_Image.style.display='inline'; Codehighlighter1_197_330_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_197_330_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_197_330_Closed_Text.style.display='none'; Codehighlighter1_197_330_Open_Image.style.display='inline'; Codehighlighter1_197_330_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_197_330_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_197_330_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;testparam&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.getParameter(</span><span style="color: #000000">"</span><span style="color: #000000">testparam</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.getSession().setAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">testAttribute</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;testparam);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
对于此Servlet在xml的配置我就不写了．想必你也了然于心了吧．<br />
<br />
来看看我们的测试类:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;junit.framework.Test;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;junit.framework.TestSuite;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.cactus.ServletTestCase;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.cactus.WebRequest;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestSampleServlet&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;ServletTestCase<br />
<img id="Codehighlighter1_199_731_Open_Image" onclick="this.style.display='none'; Codehighlighter1_199_731_Open_Text.style.display='none'; Codehighlighter1_199_731_Closed_Image.style.display='inline'; Codehighlighter1_199_731_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_199_731_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_199_731_Closed_Text.style.display='none'; Codehighlighter1_199_731_Open_Image.style.display='inline'; Codehighlighter1_199_731_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_199_731_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_199_731_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;TestSampleServlet(String&nbsp;theName)<br />
<img id="Codehighlighter1_250_280_Open_Image" onclick="this.style.display='none'; Codehighlighter1_250_280_Open_Text.style.display='none'; Codehighlighter1_250_280_Closed_Image.style.display='inline'; Codehighlighter1_250_280_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_250_280_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_250_280_Closed_Text.style.display='none'; Codehighlighter1_250_280_Open_Image.style.display='inline'; Codehighlighter1_250_280_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_250_280_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_250_280_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">super</span><span style="color: #000000">(theName);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Test&nbsp;suite()<br />
<img id="Codehighlighter1_318_379_Open_Image" onclick="this.style.display='none'; Codehighlighter1_318_379_Open_Text.style.display='none'; Codehighlighter1_318_379_Closed_Image.style.display='inline'; Codehighlighter1_318_379_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_318_379_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_318_379_Closed_Text.style.display='none'; Codehighlighter1_318_379_Open_Image.style.display='inline'; Codehighlighter1_318_379_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_318_379_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_318_379_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TestSuite(TestSampleServlet.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;beginSaveToSessionOK(WebRequest&nbsp;webRequest)<br />
<img id="Codehighlighter1_446_511_Open_Image" onclick="this.style.display='none'; Codehighlighter1_446_511_Open_Text.style.display='none'; Codehighlighter1_446_511_Closed_Image.style.display='inline'; Codehighlighter1_446_511_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_446_511_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_446_511_Closed_Text.style.display='none'; Codehighlighter1_446_511_Open_Image.style.display='inline'; Codehighlighter1_446_511_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_446_511_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_446_511_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;webRequest.addParameter(</span><span style="color: #000000">"</span><span style="color: #000000">testparam</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">it&nbsp;works!</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;testSaveToSessionOK()<br />
<img id="Codehighlighter1_556_729_Open_Image" onclick="this.style.display='none'; Codehighlighter1_556_729_Open_Text.style.display='none'; Codehighlighter1_556_729_Closed_Image.style.display='inline'; Codehighlighter1_556_729_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_556_729_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_556_729_Closed_Text.style.display='none'; Codehighlighter1_556_729_Open_Image.style.display='inline'; Codehighlighter1_556_729_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_556_729_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_556_729_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SampleServlet&nbsp;servlet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SampleServlet();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;servlet.saveToSession(request);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assertEquals(</span><span style="color: #000000">"</span><span style="color: #000000">it&nbsp;works!</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;session.getAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">testAttribute</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
<br />
部署之后，启动Tomcat,访问:</p>
<p><code>http://localhost:8080/test/ServletTestRunner?suite=TestSampleServlet</code> <br />
这时候你会看到输出　：<br />
<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;?</span><span style="color: #000000">xml&nbsp;version</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">1.0</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;encoding</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">UTF-8</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">?&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">testsuites</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">testsuite&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">com.test.servlet.TestServletTest</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;tests</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">1</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;failures</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">0</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;errors</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">1</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;time</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">0.516</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">testcase&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">testSaveSessionToOK</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;time</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">0.36</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">error&nbsp;message</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">org/apache/commons/codec/DecoderException</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">java.lang.NoClassDefFoundError</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">java.lang.NoClassDefFoundError:&nbsp;org</span><span style="color: #000000">/</span><span style="color: #000000">apache</span><span style="color: #000000">/</span><span style="color: #000000">commons</span><span style="color: #000000">/</span><span style="color: #000000">codec</span><span style="color: #000000">/</span><span style="color: #000000">DecoderException&nbsp;at&nbsp;org.apache.commons.httpclient.HttpMethodBase.getURI(HttpMethodBase.java:</span><span style="color: #000000">265</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:</span><span style="color: #000000">383</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:</span><span style="color: #000000">346</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.cactus.internal.client.connector.http.HttpClientConnectionHelper.connect_aroundBody0(HttpClientConnectionHelper.java:</span><span style="color: #000000">144</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.cactus.internal.client.connector.http.HttpClientConnectionHelper.connect_aroundBody1$advice(HttpClientConnectionHelper.java:</span><span style="color: #000000">307</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.cactus.internal.client.connector.http.HttpClientConnectionHelper.connect(HttpClientConnectionHelper.java:</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.cactus.internal.client.connector.http.DefaultHttpClient.callRunTest(DefaultHttpClient.java:</span><span style="color: #000000">163</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest_aroundBody0(DefaultHttpClient.java:</span><span style="color: #000000">81</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest_aroundBody1$advice(DefaultHttpClient.java:</span><span style="color: #000000">307</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest(DefaultHttpClient.java:</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runWebTest(HttpProtocolHandler.java:</span><span style="color: #000000">164</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest_aroundBody0(HttpProtocolHandler.java:</span><span style="color: #000000">83</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest_aroundBody1$advice(HttpProtocolHandler.java:</span><span style="color: #000000">307</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest(HttpProtocolHandler.java:</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.cactus.internal.client.ClientTestCaseCaller.runTest(ClientTestCaseCaller.java:</span><span style="color: #000000">145</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.cactus.internal.AbstractCactusTestCase.runBareClient(AbstractCactusTestCase.java:</span><span style="color: #000000">218</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.cactus.internal.AbstractCactusTestCase.runBare(AbstractCactusTestCase.java:</span><span style="color: #000000">134</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.cactus.server.runner.ServletTestRunner.run(ServletTestRunner.java:</span><span style="color: #000000">309</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.cactus.server.runner.ServletTestRunner.doGet_aroundBody0(ServletTestRunner.java:</span><span style="color: #000000">187</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.cactus.server.runner.ServletTestRunner.doGet_aroundBody1$advice(ServletTestRunner.java:</span><span style="color: #000000">225</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.cactus.server.runner.ServletTestRunner.doGet(ServletTestRunner.java:</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;at&nbsp;javax.servlet.http.HttpServlet.service(HttpServlet.java:</span><span style="color: #000000">690</span><span style="color: #000000">)&nbsp;at&nbsp;javax.servlet.http.HttpServlet.service(HttpServlet.java:</span><span style="color: #000000">803</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:</span><span style="color: #000000">290</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:</span><span style="color: #000000">206</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:</span><span style="color: #000000">230</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:</span><span style="color: #000000">175</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:</span><span style="color: #000000">128</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:</span><span style="color: #000000">104</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:</span><span style="color: #000000">109</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:</span><span style="color: #000000">261</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:</span><span style="color: #000000">844</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:</span><span style="color: #000000">581</span><span style="color: #000000">)&nbsp;at&nbsp;org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:</span><span style="color: #000000">447</span><span style="color: #000000">)&nbsp;at&nbsp;java.lang.Thread.run(Unknown&nbsp;Source)</span><span style="color: #000000">&lt;/</span><span style="color: #000000">error</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">testcase</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">testsuite</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">testsuites</span><span style="color: #000000">&gt;</span></div>
<br />
看来程序没有大问题，已经正确执行．不过这时提示有一个类找不到．<br />
对于这个问题我们可以去<font style="background-color: #f4f4f4"><a href="http://commons.apache.org/downloads/download_codec.cgi">http://commons.apache.org/downloads/download_codec.cgi</a></font>下载．<br />
<br />
这个xml看起来多少不习惯．我们可以下载xsl把它转换成html格式．<br />
<a title="点此下载&#13;&#10;" href="http://jakarta.apache.org/cactus/misc/cactus-report.xsl">点此下载 </a>把它放到你web应用的根目录下．<br />
<br />
这个时候你可以访问如下地址：<br />
<code>http://localhost:8080/test/ServletTestRunner?suite=TestSampleServlet&amp;xsl=cactus-report.xsl<br />
</code><br />
这时候你就会看到友好的Html格式了:<br />
<img alt="HTML output of ServletTestRunner" src="http://jakarta.apache.org/cactus/images/tomcat_html.jpg" /><br />
<img src ="http://www.blogjava.net/supercrsky/aggbug/205106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2008-06-01 01:11 <a href="http://www.blogjava.net/supercrsky/articles/205106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>selenium初探</title><link>http://www.blogjava.net/supercrsky/articles/162866.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Sat, 24 Nov 2007 08:13:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/162866.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/162866.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/162866.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/162866.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/162866.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt">先确保你的4444端口没被占用,可以用netstat -an命令查看一下.<br />
然后确保你的jdk版本在1.5以上.<br />
<br />
第一步:<br />
找到你下载的selenium解压目录下的selenium-server-0.9.2目录.<br />
在这个目录下写个批处理,内容为:</span><br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">java&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">jar&nbsp;selenium</span><span style="color: #000000">-</span><span style="color: #000000">server.jar</span></div>
<span style="font-size: 14pt">保存为start.bat,名字随便啦.双击启动.这个是服务,在一切工作开始之前,<br />
必须先启动这个,启动后的dos窗口不要关闭.<br />
<br />
第二步:<br />
在MyEclipse建个web工程,把selenium-java-client-driver-0.9.2目录下的jar包加入<br />
到web工程的lib目录下.加入junit4支持.<br />
<br />
第三步:<br />
写个测试index.jsp页:</span><br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_2_67_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2_67_Open_Text.style.display='none'; Codehighlighter1_2_67_Closed_Image.style.display='inline'; Codehighlighter1_2_67_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2_67_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2_67_Closed_Text.style.display='none'; Codehighlighter1_2_67_Open_Image.style.display='inline'; Codehighlighter1_2_67_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #000000; background-color: #ffff00">&lt;%</span><span id="Codehighlighter1_2_67_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2_67_Open_Text"><span style="color: #000000; background-color: #f5f5f5">@&nbsp;page&nbsp;language</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">java</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;import</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">java.util.*</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;pageEncoding</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">GB18030</span><span style="color: #000000; background-color: #f5f5f5">"</span></span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">test!</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form&nbsp;</span><span style="color: #ff0000">action</span><span style="color: #0000ff">="success.jsp"</span><span style="color: #ff0000">&nbsp;method</span><span style="color: #0000ff">="post"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;UserName:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="username"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;&lt;</span><span style="color: #800000">br&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">select&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="select"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">option&nbsp;</span><span style="color: #ff0000">value</span><span style="color: #0000ff">="game"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">游戏</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">option</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">option&nbsp;</span><span style="color: #ff0000">value</span><span style="color: #0000ff">="program"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">编程</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">option</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">select</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">br</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="submit"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="sub"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="submit"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">br&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
还有一个success.jsp:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">success</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ok!<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
写个测试类:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.junit.After;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.junit.Before;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.junit.Test;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.openqa.selenium.server.SeleniumServer;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;org.junit.Assert.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.thoughtworks.selenium.DefaultSelenium;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.thoughtworks.selenium.Selenium;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestPage<br />
<img id="Codehighlighter1_273_1741_Open_Image" onclick="this.style.display='none'; Codehighlighter1_273_1741_Open_Text.style.display='none'; Codehighlighter1_273_1741_Closed_Image.style.display='inline'; Codehighlighter1_273_1741_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_273_1741_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_273_1741_Closed_Text.style.display='none'; Codehighlighter1_273_1741_Open_Image.style.display='inline'; Codehighlighter1_273_1741_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_273_1741_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_273_1741_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Selenium&nbsp;selenium;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Before<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setUp()<br />
<img id="Codehighlighter1_334_517_Open_Image" onclick="this.style.display='none'; Codehighlighter1_334_517_Open_Text.style.display='none'; Codehighlighter1_334_517_Closed_Image.style.display='inline'; Codehighlighter1_334_517_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_334_517_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_334_517_Closed_Text.style.display='none'; Codehighlighter1_334_517_Open_Image.style.display='inline'; Codehighlighter1_334_517_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_334_517_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_334_517_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">此url必须是Selenium服务器地址</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">http://localhost:4444</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DefaultSelenium(</span><span style="color: #000000">"</span><span style="color: #000000">localhost</span><span style="color: #000000">"</span><span style="color: #000000">,SeleniumServer.getDefaultPort(),</span><span style="color: #000000">"</span><span style="color: #000000">*iexplore</span><span style="color: #000000">"</span><span style="color: #000000">,url);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.start();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@After<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;tearDown()<br />
<img id="Codehighlighter1_554_665_Open_Image" onclick="this.style.display='none'; Codehighlighter1_554_665_Open_Text.style.display='none'; Codehighlighter1_554_665_Closed_Image.style.display='inline'; Codehighlighter1_554_665_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_554_665_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_554_665_Closed_Text.style.display='none'; Codehighlighter1_554_665_Open_Image.style.display='inline'; Codehighlighter1_554_665_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_554_665_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_554_665_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br />
<img id="Codehighlighter1_564_588_Open_Image" onclick="this.style.display='none'; Codehighlighter1_564_588_Open_Text.style.display='none'; Codehighlighter1_564_588_Closed_Image.style.display='inline'; Codehighlighter1_564_588_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_564_588_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_564_588_Closed_Text.style.display='none'; Codehighlighter1_564_588_Open_Image.style.display='inline'; Codehighlighter1_564_588_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_564_588_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_564_588_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.stop();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(RuntimeException&nbsp;e)<br />
<img id="Codehighlighter1_619_662_Open_Image" onclick="this.style.display='none'; Codehighlighter1_619_662_Open_Text.style.display='none'; Codehighlighter1_619_662_Closed_Image.style.display='inline'; Codehighlighter1_619_662_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_619_662_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_619_662_Closed_Text.style.display='none'; Codehighlighter1_619_662_Open_Image.style.display='inline'; Codehighlighter1_619_662_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_619_662_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_619_662_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(e.getMessage());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">测试标题,文本框输入,及按钮点击</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;@Test<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;test1()<br />
<img id="Codehighlighter1_716_1253_Open_Image" onclick="this.style.display='none'; Codehighlighter1_716_1253_Open_Text.style.display='none'; Codehighlighter1_716_1253_Closed_Image.style.display='inline'; Codehighlighter1_716_1253_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_716_1253_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_716_1253_Closed_Text.style.display='none'; Codehighlighter1_716_1253_Open_Image.style.display='inline'; Codehighlighter1_716_1253_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_716_1253_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_716_1253_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">我这里是tomcat的地址,我的tomcat端口是8888,selenium是当前工程,我让它打开首页</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.open(</span><span style="color: #000000">"</span><span style="color: #000000">http://localhost:8888/selenium/index.jsp</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;title&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;selenium.getTitle();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">原来网页的标题</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(title);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.type(</span><span style="color: #000000">"</span><span style="color: #000000">xpath=//input[@name='username']</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">zdw</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">得到输入的文本框的值</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">textvalue:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;selenium.getValue(</span><span style="color: #000000">"</span><span style="color: #000000">xpath=//input[@name='username']</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.click(</span><span style="color: #000000">"</span><span style="color: #000000">xpath=//input[@name='sub']</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.waitForPageToLoad(</span><span style="color: #000000">"</span><span style="color: #000000">4000</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assertEquals(title,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">test!</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">输出新页的标题</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(selenium.getTitle());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">测试选择框</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;@Test<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;testSelect()<br />
<img id="Codehighlighter1_1298_1735_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1298_1735_Open_Text.style.display='none'; Codehighlighter1_1298_1735_Closed_Image.style.display='inline'; Codehighlighter1_1298_1735_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1298_1735_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1298_1735_Closed_Text.style.display='none'; Codehighlighter1_1298_1735_Open_Image.style.display='inline'; Codehighlighter1_1298_1735_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1298_1735_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1298_1735_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.open(</span><span style="color: #000000">"</span><span style="color: #000000">http://localhost:8888/selenium/index.jsp</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.select(</span><span style="color: #000000">"</span><span style="color: #000000">xpath=//select[@name='select']</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">index=1</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">得到选择的id</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">selectid:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;selenium.getSelectedIndex(</span><span style="color: #000000">"</span><span style="color: #000000">xpath=//select[@name='select']</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">得到选择的值</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">selectvalue:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;selenium.getSelectedValue(</span><span style="color: #000000">"</span><span style="color: #000000">xpath=//select[@name='select']</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.click(</span><span style="color: #000000">"</span><span style="color: #000000">xpath=//input[@type='submit']</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.waitForPageToLoad(</span><span style="color: #000000">"</span><span style="color: #000000">3000</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<span style="font-size: 14pt">注释已经很详细了,感觉selenium很好用,完全可以模拟浏览器操作.我这里用的是ie,你当然可以用firefox或其它.<br />
源码可在我的网盘下载.</span>
<img src ="http://www.blogjava.net/supercrsky/aggbug/162866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2007-11-24 16:13 <a href="http://www.blogjava.net/supercrsky/articles/162866.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Selenium 使用介绍 </title><link>http://www.blogjava.net/supercrsky/articles/162787.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Sat, 24 Nov 2007 02:03:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/162787.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/162787.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/162787.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/162787.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/162787.html</trackback:ping><description><![CDATA[<p><span style="font-size: 14pt">Selenium 是 thoughtworks公司的一个集成测试的强大工具。最近参与了一个系统移植的项目，正好用到这个工具，</span></p>
<p><span style="font-size: 14pt">把一些使用心得分享给大家，希望大家能多多使用这样的强大的，免费的工具，来保证我们的质量。</span></p>
<p><span style="font-size: 14pt">Selenium 的文档现存的不少，不过都太简单了。使用Selenium的时候，我更多的是直接去看API文档，好在API不错，</span></p>
<p><span style="font-size: 14pt">一个一个看，就能找到所需要的 :-)&nbsp;&nbsp; 官方网站：</span><a href="http://www.openqa.org/selenium/"><span style="font-size: 14pt">http://www.openqa.org/selenium/</span></a></p>
<p><span style="font-size: 14pt">好，下面进入正题！</span></p>
<p><span style="font-size: 14pt">一、Selenium 的版本</span></p>
<p><span style="font-size: 14pt">Selenium 现在存在2个版本，一个叫 selenium-core, 一个叫selenium-rc 。</span></p>
<p><span style="font-size: 14pt">selenium-core 是使用HTML的方式来编写测试脚本，你也可以使用 Selenium-IDE来录制脚本，但是目前Selenium-IDE<br />
只有 FireFox 版本。</span></p>
<p><span style="font-size: 14pt">Selenium-RC 是 selenium-remote control 缩写，是使用具体的语言来编写测试类。</span></p>
<p><span style="font-size: 14pt">selenium-rc 支持的语言非常多，这里我们着重关注java的方式。这里讲的也主要是 selenium-rc，因为个人还是喜欢这种<br />
方式 :-)</span></p>
<p><span style="font-size: 14pt">&nbsp;二、一些准备工作</span></p>
<p><span style="font-size: 14pt">1、当然是下载 selenium 了，到 </span><a href="http://www.openqa.org/selenium/"><span style="font-size: 14pt">http://www.openqa.org/selenium/</span></a><span style="font-size: 14pt">&nbsp;下载就可以了，记得选择selenium-rc 的版本。</span></p>
<p><span style="font-size: 14pt">2、学习一下 xpath 的知识。有个教程：</span><a class="offsite" href="http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html" target="_blank"><span style="font-size: 14pt">http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html</span></a><br />
<span style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp; 一定要学习这个，不然你根本看不懂下面的内容！</span></p>
<p><span style="font-size: 14pt">3、安装 jdk1.5</span></p>
<p><span style="font-size: 14pt">&nbsp;三、selenium-rc 一些使用方法</span></p>
<p><span style="font-size: 14pt">在 selenium-remote-control-0.9.0\server 目录里，我们运行 java -jar selenium-server.jar<br />
之后你就会看到一些启动信息。要使用 selenium-rc ，启动这个server 是必须的。</span></p>
<p><span style="font-size: 14pt">当然，启动的时候有许多参数，这些用法可以在网站里看看教程，不过不加参数也已经足够了。</span></p>
<p><span style="font-size: 14pt">selenium server 启动完毕了，那么我们就可以开始编写测试类了！</span></p>
<p><span style="font-size: 14pt">我们先有个概念，selenium 是模仿浏览器的行为的，当你运行测试类的时候，你就会发现selenium 会打开一个</span></p>
<p><span style="font-size: 14pt">浏览器，然后浏览器执行你的操作。</span></p>
<p><span style="font-size: 14pt">&nbsp;好吧，首先生成我们的测试类：</span></p>
java 代码
<p class="alt"><span style="font-size: 14pt">&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_40_591_Open_Image" onclick="this.style.display='none'; Codehighlighter1_40_591_Open_Text.style.display='none'; Codehighlighter1_40_591_Closed_Image.style.display='inline'; Codehighlighter1_40_591_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_40_591_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_40_591_Closed_Text.style.display='none'; Codehighlighter1_40_591_Open_Image.style.display='inline'; Codehighlighter1_40_591_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestPage2&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;TestCase&nbsp;</span><span id="Codehighlighter1_40_591_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_40_591_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Selenium&nbsp;selenium;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_125_429_Open_Image" onclick="this.style.display='none'; Codehighlighter1_125_429_Open_Text.style.display='none'; Codehighlighter1_125_429_Closed_Image.style.display='inline'; Codehighlighter1_125_429_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_125_429_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_125_429_Closed_Text.style.display='none'; Codehighlighter1_125_429_Open_Image.style.display='inline'; Codehighlighter1_125_429_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setUp()&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;</span><span id="Codehighlighter1_125_429_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_125_429_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&#8220;http:</span><span style="color: #008000">//</span><span style="color: #008000">xxx.xxx.xxx.xxx/yyy&#8221;;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DefaultSelenium(</span><span style="color: #000000">"</span><span style="color: #000000">localhost</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;SeleniumServer.getDefaultPort&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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;</span><span style="color: #000000">"</span><span style="color: #000000">*iexplore</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;url);&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.start();&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">super</span><span style="color: #000000">.setUp();&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;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_484_581_Open_Image" onclick="this.style.display='none'; Codehighlighter1_484_581_Open_Text.style.display='none'; Codehighlighter1_484_581_Closed_Image.style.display='inline'; Codehighlighter1_484_581_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_484_581_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_484_581_Closed_Text.style.display='none'; Codehighlighter1_484_581_Open_Image.style.display='inline'; Codehighlighter1_484_581_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;tearDown()&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;</span><span id="Codehighlighter1_484_581_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_484_581_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selenium.stop();&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">super</span><span style="color: #000000">.tearDown();&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p class="alt"></span>&nbsp;</p>
<p><span style="font-size: 14pt">代码十分简单，作用就是初始化一个 Selenium 对象。其中：<br />
url : 就是你要测试的网站<br />
localhost:&nbsp; 可以不是localhost，但是必须是 selenium server 启动的地址<br />
*iexplore :&nbsp; 可以是其它浏览器类型，可以在网站上看都支持哪些。</span></p>
<p><span style="font-size: 14pt">下面我就要讲讲怎么使用selenium 这个对象来进行测试。</span></p>
<p><span style="font-size: 14pt">1、测试文本输入框</span></p>
<p><span style="font-size: 14pt">假设页面上有一个文本输入框，我们要测试的内容是 在其中输入一些内容，然后点击一个按钮，看看页面的是否跳转<br />
到需要的页面。<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_20_325_Open_Image" onclick="this.style.display='none'; Codehighlighter1_20_325_Open_Text.style.display='none'; Codehighlighter1_20_325_Closed_Image.style.display='inline'; Codehighlighter1_20_325_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_20_325_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_20_325_Closed_Text.style.display='none'; Codehighlighter1_20_325_Open_Image.style.display='inline'; Codehighlighter1_20_325_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;test1()&nbsp;</span><span id="Codehighlighter1_20_325_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_20_325_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;selenium.open(</span><span style="color: #000000">"</span><span style="color: #000000">http://xxx.xxx.xxx/yyy</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;selenium.type(</span><span style="color: #000000">"</span><span style="color: #000000">xpath=//input[@name='userID']</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">test-user</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;selenium.click(</span><span style="color: #000000">"</span><span style="color: #000000">xpath=//input[@type='button']</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;selenium.waitForPageToLoad(</span><span style="color: #000000">"</span><span style="color: #000000">2000</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;assertEquals(selenium.getTitle(),&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Welcome</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
</span></p>
<p><span style="font-size: 14pt">上面的代码是这个意思：<br />
1、调用 selenium.open 方法，浏览器会打开相应的页面<br />
2、使用 type 方法来给输入框输入文字<br />
3、等待页面载入<br />
4、看看新的页面标题是不是我们想要的。</span></p>
<p><span style="font-size: 14pt">2、测试下拉框</span></p>
<span style="font-size: 14pt">java 代码<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_20_355_Open_Image" onclick="this.style.display='none'; Codehighlighter1_20_355_Open_Text.style.display='none'; Codehighlighter1_20_355_Closed_Image.style.display='inline'; Codehighlighter1_20_355_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_20_355_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_20_355_Closed_Text.style.display='none'; Codehighlighter1_20_355_Open_Image.style.display='inline'; Codehighlighter1_20_355_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;test1()&nbsp;</span><span id="Codehighlighter1_20_355_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_20_355_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;selenium.open(</span><span style="color: #000000">"</span><span style="color: #000000">http://xxx.xxx.xxx/yyy</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;selenium.select(</span><span style="color: #000000">"</span><span style="color: #000000">xpath=//SELECT[@name='SBBUSYO']</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">index=1</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;selenium.click(</span><span style="color: #000000">"</span><span style="color: #000000">xpath=//input[@type='button']</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;selenium.waitForPageToLoad(</span><span style="color: #000000">"</span><span style="color: #000000">2000</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;assertEquals(selenium.getTitle(),&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Welcome</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
</span>
<p><span style="font-size: 14pt">可以看到，我们可以使用 select 方法来确定选择下拉框中的哪个选项。<br />
select 方法还有很多用法，具体去看看文档吧。</span></p>
<p><span style="font-size: 14pt">3、测试check box</span></p>
<p><span style="font-size: 14pt">java 代码<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_20_374_Open_Image" onclick="this.style.display='none'; Codehighlighter1_20_374_Open_Text.style.display='none'; Codehighlighter1_20_374_Closed_Image.style.display='inline'; Codehighlighter1_20_374_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_20_374_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_20_374_Closed_Text.style.display='none'; Codehighlighter1_20_374_Open_Image.style.display='inline'; Codehighlighter1_20_374_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;test1()&nbsp;</span><span id="Codehighlighter1_20_374_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_20_374_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;selenium.open(</span><span style="color: #000000">"</span><span style="color: #000000">http://xxx.xxx.xxx/yyy</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;selenium.check(</span><span style="color: #000000">"</span><span style="color: #000000">xpath=//input[@name='MEICK_000']</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;selenium.click(</span><span style="color: #000000">"</span><span style="color: #000000">xpath=//input[@type='button']</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;selenium.waitForPageToLoad(</span><span style="color: #000000">"</span><span style="color: #000000">2000</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;assertEquals(selenium.getTitle(),&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Welcome</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
</span></p>
<p><span style="font-size: 14pt">我们可以使用 check 方法来确定选择哪个radio button</span></p>
<p><span style="font-size: 14pt">4、得到文本框里的文字</span></p>
<span style="font-size: 14pt">java 代码</span>
<p class="alt"><span style="font-size: 14pt"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">assertEquals(selenium.getValue(</span><span style="color: #000000">"</span><span style="color: #000000">xpath=//input[@name='WNO']</span><span style="color: #000000">"</span><span style="color: #000000">),&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;</span></div>
<p class="alt"></span></span></span>&nbsp;</p>
<p><span style="font-size: 14pt">getValue 方法就是得到文本框里的数值，可不是 getText 方法，用错了可就郁闷了。</span></p>
<p><span style="font-size: 14pt">5、判断页面是否存在一个元素</span></p>
<span style="font-size: 14pt">java 代码</span>
<p class="alt"><span style="font-size: 14pt"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">assertTrue(selenium.isElementPresent(</span><span style="color: #000000">"</span><span style="color: #000000">xpath=//input[@name='MEICK_000']</span><span style="color: #000000">"</span><span style="color: #000000">));&nbsp;&nbsp;</span></div>
<p class="alt"></span></span>&nbsp;</span></p>
<p><span style="font-size: 14pt">一般这个是用来测试当删除一些数据后，页面上有些东西就不会显示的情况。</span></p>
<p><span style="font-size: 14pt">6、判断下拉框里选择了哪个选项</span></p>
<span style="font-size: 14pt">java 代码</span>
<p class="alt"><span style="font-size: 14pt"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">assertEquals(selenium.getSelectedIndex(</span><span style="color: #000000">"</span><span style="color: #000000">xpath=//SELECT[@name='HATIMING']</span><span style="color: #000000">"</span><span style="color: #000000">),&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;</span></div>
<p class="alt"></span></span></span>&nbsp;</p>
<p><span style="font-size: 14pt">这个可以用来判断下拉框显示的选项是否是期望的选项。</span></p>
<p><span style="font-size: 14pt">7、如果有 alert 弹出对话框怎么办？</span></p>
<p><span style="font-size: 14pt">这个问题弄了挺长时间，可以这样来关闭弹出的对跨框：</span></p>
<span style="font-size: 14pt">java 代码<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_30_72_Open_Image" onclick="this.style.display='none'; Codehighlighter1_30_72_Open_Text.style.display='none'; Codehighlighter1_30_72_Closed_Image.style.display='inline'; Codehighlighter1_30_72_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_30_72_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_30_72_Closed_Text.style.display='none'; Codehighlighter1_30_72_Open_Image.style.display='inline'; Codehighlighter1_30_72_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">if</span><span style="color: #000000">(selenium.isAlertPresent())&nbsp;</span><span id="Codehighlighter1_30_72_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_30_72_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;selenium.getAlert();&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span></div>
<br />
</span>
<p><span style="font-size: 14pt">其实当调用 selenium.getAlert() 时，就会关闭 alert 弹出的对话框。<br />
也可以使用 System.out.println(selenium.getAlert()) 来查看对跨框显示的信息。</span></p>
<p><span style="font-size: 14pt">在测试的时候，有的人会显示许多alert 来查看运行时的数据，那么我们可以用下面的方式来关闭那些 alert:</span></p>
<span style="font-size: 14pt">java 代码<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_33_91_Open_Image" onclick="this.style.display='none'; Codehighlighter1_33_91_Open_Text.style.display='none'; Codehighlighter1_33_91_Closed_Image.style.display='inline'; Codehighlighter1_33_91_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_33_91_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_33_91_Closed_Text.style.display='none'; Codehighlighter1_33_91_Open_Image.style.display='inline'; Codehighlighter1_33_91_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">while</span><span style="color: #000000">(selenium.isAlertPresent())&nbsp;</span><span id="Codehighlighter1_33_91_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_33_91_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;selenium.getAlert();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span></div>
<br />
</span>
<p><span style="font-size: 14pt">8、如何测试一些错误消息的显示？</span></p>
<span style="font-size: 14pt">java 代码<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">assertTrue(selenium.getBodyText().indexOf(</span><span style="color: #000000">"</span><span style="color: #000000">错误消息</span><span style="color: #000000">"</span><span style="color: #000000">)</span><span style="color: #000000">&gt;=</span><span style="color: #000000">0</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;</span></div>
<br />
</span>
<p><span style="font-size: 14pt">切记： getBodyText 返回的时浏览器页面上的文字，不回包含html 代码的，如果要显示html 代码，用下面这个:</span></p>
<span style="font-size: 14pt">java 代码<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">System.out.println(selenium.getHtmlSource());&nbsp;&nbsp;&nbsp;</span></div>
<br />
</span>
<p><span style="font-size: 14pt">以上就是最常用的几个方法了，例如 click, type, getValue 等等。<br />
还有就是一定要学习 xpath, 其实xpath 也可以有&#8220;与、或、非&#8221;的操作：</span></p>
<span style="font-size: 14pt">java 代码</span>
<p><span style="font-size: 14pt">四、其他</span></p>
<p><span style="font-size: 14pt">selenium 还有更多的用法，例如弹出页面等等。当面对没见过的测试要求时，我最笨的方法就是按照api文档一个一个找，<br />
好在不多，肯定能找到。<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">selenium.check(</span><span style="color: #000000">"</span><span style="color: #000000">xpath=//input[(@name='KNYKBN')and(@value='Y')]</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;</span></div>
</span>
<img src ="http://www.blogjava.net/supercrsky/aggbug/162787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2007-11-24 10:03 <a href="http://www.blogjava.net/supercrsky/articles/162787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TestSuite集合测试的使用</title><link>http://www.blogjava.net/supercrsky/articles/162777.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Sat, 24 Nov 2007 00:50:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/162777.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/162777.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/162777.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/162777.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/162777.html</trackback:ping><description><![CDATA[<p>有时候需要一次测试所有的类(或多个),这时候就用到了TestSuite.<br />
举例说明:<br />
这里有两个TestCase类.<br />
Person:<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;junit.framework.TestCase;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Person&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;TestCase<br />
<img id="Codehighlighter1_83_237_Open_Image" onclick="this.style.display='none'; Codehighlighter1_83_237_Open_Text.style.display='none'; Codehighlighter1_83_237_Closed_Image.style.display='inline'; Codehighlighter1_83_237_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_83_237_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_83_237_Closed_Text.style.display='none'; Codehighlighter1_83_237_Open_Image.style.display='inline'; Codehighlighter1_83_237_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_83_237_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_83_237_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;testMethod1()<br />
<img id="Codehighlighter1_113_156_Open_Image" onclick="this.style.display='none'; Codehighlighter1_113_156_Open_Text.style.display='none'; Codehighlighter1_113_156_Closed_Image.style.display='inline'; Codehighlighter1_113_156_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_113_156_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_113_156_Closed_Text.style.display='none'; Codehighlighter1_113_156_Open_Image.style.display='inline'; Codehighlighter1_113_156_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span id="Codehighlighter1_113_156_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_113_156_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Person:method1</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;testMethod2()<br />
<img id="Codehighlighter1_188_231_Open_Image" onclick="this.style.display='none'; Codehighlighter1_188_231_Open_Text.style.display='none'; Codehighlighter1_188_231_Closed_Image.style.display='inline'; Codehighlighter1_188_231_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_188_231_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_188_231_Closed_Text.style.display='none'; Codehighlighter1_188_231_Open_Image.style.display='inline'; Codehighlighter1_188_231_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span id="Codehighlighter1_188_231_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_188_231_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Person:method2</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p><br />
Student:<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;junit.framework.TestCase;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Student&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;TestCase<br />
<img id="Codehighlighter1_84_158_Open_Image" onclick="this.style.display='none'; Codehighlighter1_84_158_Open_Text.style.display='none'; Codehighlighter1_84_158_Closed_Image.style.display='inline'; Codehighlighter1_84_158_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_84_158_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_84_158_Closed_Text.style.display='none'; Codehighlighter1_84_158_Open_Image.style.display='inline'; Codehighlighter1_84_158_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_84_158_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_84_158_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;testMethod()<br />
<img id="Codehighlighter1_113_156_Open_Image" onclick="this.style.display='none'; Codehighlighter1_113_156_Open_Text.style.display='none'; Codehighlighter1_113_156_Closed_Image.style.display='inline'; Codehighlighter1_113_156_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_113_156_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_113_156_Closed_Text.style.display='none'; Codehighlighter1_113_156_Open_Image.style.display='inline'; Codehighlighter1_113_156_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span id="Codehighlighter1_113_156_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_113_156_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Student:method</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
集合测试的类:PersonSuite<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;junit.awtui.TestRunner;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;junit.framework.Test;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;junit.framework.TestCase;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;junit.framework.TestSuite;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;PersonSuite&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;TestCase<br />
<img id="Codehighlighter1_182_443_Open_Image" onclick="this.style.display='none'; Codehighlighter1_182_443_Open_Text.style.display='none'; Codehighlighter1_182_443_Closed_Image.style.display='inline'; Codehighlighter1_182_443_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_182_443_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_182_443_Closed_Text.style.display='none'; Codehighlighter1_182_443_Open_Image.style.display='inline'; Codehighlighter1_182_443_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_182_443_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_182_443_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Test&nbsp;suite()<br />
<img id="Codehighlighter1_213_330_Open_Image" onclick="this.style.display='none'; Codehighlighter1_213_330_Open_Text.style.display='none'; Codehighlighter1_213_330_Closed_Image.style.display='inline'; Codehighlighter1_213_330_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_213_330_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_213_330_Closed_Text.style.display='none'; Codehighlighter1_213_330_Open_Image.style.display='inline'; Codehighlighter1_213_330_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span id="Codehighlighter1_213_330_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_213_330_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;TestSuite&nbsp;ts&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TestSuite();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;ts.addTestSuite(Person.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;ts.addTestSuite(Student.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;ts;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)<br />
<img id="Codehighlighter1_375_441_Open_Image" onclick="this.style.display='none'; Codehighlighter1_375_441_Open_Text.style.display='none'; Codehighlighter1_375_441_Closed_Image.style.display='inline'; Codehighlighter1_375_441_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_375_441_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_375_441_Closed_Text.style.display='none'; Codehighlighter1_375_441_Open_Image.style.display='inline'; Codehighlighter1_375_441_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span id="Codehighlighter1_375_441_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_375_441_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">用TestRunner呼叫suite&nbsp;方法</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;TestRunner.run(PersonSuite.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/supercrsky/aggbug/162777.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2007-11-24 08:50 <a href="http://www.blogjava.net/supercrsky/articles/162777.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>全面认识JUnit4.0</title><link>http://www.blogjava.net/supercrsky/articles/162775.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Sat, 24 Nov 2007 00:43:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/162775.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/162775.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/162775.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/162775.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/162775.html</trackback:ping><description><![CDATA[<font color="#00b050"><strong>提要</strong> 本文将向你介绍如何实现从JUnit 3.8向JUnit 4的迁移。同时，还讨论JUnit 4中的一些新特征，特别包括对注解的使用；最后，简要介绍这个新版本的IDE集成现状。</font><br />
<br />
　　<font color="#ff0000"><strong>一、 引言</strong><br />
<br />
　　在本文开始，我将假定，你已经了解由Kent Beck和Erich Gamma发明的这个Java单元测试框架并因此而略过必要的简介。所以，我将集中分析从JUnit 3.8到最新版本-JUnit 4的迁移过程以及其在IDE和Ant中的集成。<br />
<br />
　　JUnit 4是一种与其之前的版本完全不同的API，它根据Java 5.0中的新特征(注解，静态导入等)构建而成。如你所见，JUnit 4更简单、更丰富和更易于使用，而且它引入了更为灵活的初始化和清理工作，还有限时的和参数化测试用例。 <br />
<br />
　　代码实例最能说明问题。因此，在本文中，我将使用一个例子来展示不同的测试用例：一个计算器。该示例计算器很简单，效率并不高，甚至还有一些错误；它仅仅操作整数，并且把结果存储在一个静态变量中。Substract方法并不返回一个有效的结果，而且也没有实现乘法运算，而且看上去在squareRoot方法中还存在一个错误：无限循环。这些错误将帮助说明使用JUnit 4进行测试的有效性。你可以打开和关闭这个计算器，而且你可以清除这些结果。下面是其实现代码：<br />
</font><br />
<table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1">
    <tbody>
        <tr>
            <td>package calc;<br />
            public class Calculator {<br />
            　private static int result; //存储结果的静态变量<br />
            　public void add(int n) {<br />
            　　result = result + n;<br />
            　}<br />
            　public void substract(int n) {<br />
            　　result = result - 1; //错误：应该是"result = result - n"<br />
            　}<br />
            　public void multiply(int n) {} //还没实现<br />
            　public void divide(int n) {<br />
            　　result = result / n;<br />
            　}<br />
            　public void square(int n) {<br />
            　　result = n * n;<br />
            　}<br />
            　public void squareRoot(int n) {<br />
            　　for (; ;) ; //错误：无限循环<br />
            　}<br />
            　public void clear() { //清除结果<br />
            　　result = 0;<br />
            　}<br />
            　public void switchOn() { //打开屏幕，显示"hello"，并报警<br />
            　　result = 0; //实现其它的计算器功能<br />
            　}<br />
            　public void switchOff() { } //显示"bye bye"，报警，并关闭屏幕<br />
            　public int getResult() {<br />
            　　return result;<br />
            　}<br />
            }</td>
        </tr>
    </tbody>
</table>
<br />
　　<font color="#ff0000"><strong>二、 迁移一个测试类</strong><br />
<br />
　　现在，我将把一个已经使用JUnit 3.8编写成的简单的测试类迁移到JUnit 4。这个类有一些缺陷：它没有测试所有的业务方法，而且看上去在testDivide方法中还存在一个错误(8/2不等于5)。因为还没有实现乘法运算功能，所以对其测试将被忽略。<br />
<br />
　　下面，我们把两个版本的框架之间的差别以粗体显示出现于表格1中。<br />
<br />
　　表格1.分别以JUnit 3.8和JUnit 4实现的CaculatorTest。<br />
<br />
　　JUnit 3.8 <br />
</font><br />
<table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1">
    <tbody>
        <tr>
            <td>package junit3;<br />
            import calc.Calculator;<br />
            import junit.framework.TestCase;<br />
            public class CalculatorTest extends TestCase {<br />
            　private static Calculator calculator = new Calculator();<br />
            　@Override protected void setUp() { calculator.clear(); }<br />
            　public void testAdd() { <br />
            　　calculator.add(1); <br />
            　　calculator.add(1); <br />
            　　assertEquals(calculator.getResult()， 2);<br />
            　}<br />
            　public void testSubtract() {<br />
            　　calculator.add(10); <br />
            　　calculator.subtract(2);<br />
            　　assertEquals(calculator.getResult()， 8);<br />
            　}<br />
            　public void testDivide() { <br />
            　　calculator.add(8);<br />
            　　calculator.divide(2);<br />
            　　assert calculator.getResult() == 5;<br />
            　}<br />
            　public void testDivideByZero() {<br />
            　　try { <br />
            　　　calculator.divide(0);<br />
            　　　fail();<br />
            　　}<br />
            　　catch (ArithmeticException e) { }<br />
            　}<br />
            　public void notReadyYetTestMultiply() {<br />
            　　calculator.add(10);<br />
            　　calculator.multiply(10);<br />
            　　assertEquals(calculator.getResult()， 100);<br />
            　}<br />
            }</td>
        </tr>
    </tbody>
</table>
<br />
　　JUnit 4<br />
<br />
<table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1">
    <tbody>
        <tr>
            <td>package JUnit 4; <br />
            import calc.Calculator;<br />
            import org.junit.Before;<br />
            import org.junit.Ignore;<br />
            import org.junit.Test;<br />
            import static org.junit.Assert.*;<br />
            public class CalculatorTest {<br />
            　private static Calculator calculator = new Calculator();<br />
            　@Before public void clearCalculator() {<br />
            　　calculator.clear();<br />
            　}<br />
            　@Test public void add() {<br />
            　　calculator.add(1); <br />
            　　calculator.add(1);<br />
            　　assertEquals(calculator.getResult()， 2);<br />
            　}<br />
            　@Test public void subtract() {<br />
            　　calculator.add(10);<br />
            　　calculator.subtract(2);<br />
            　　assertEquals(calculator.getResult()， 8);<br />
            　}<br />
            　@Test public void divide() {<br />
            　　calculator.add(8);<br />
            　　calculator.divide(2);<br />
            　　assert calculator.getResult() == 5;<br />
            　}<br />
            　@Test(expected = ArithmeticException.class)<br />
            　public void divideByZero() {<br />
            　　calculator.divide(0);<br />
            　}<br />
            　@Ignore("not ready yet")<br />
            　@Test <br />
            　public void multiply() {<br />
            　　calculator.add(10);<br />
            　　calculator.multiply(10);<br />
            　　assertEquals(calculator.getResult()， 100);<br />
            　}<br />
            }</td>
        </tr>
    </tbody>
</table>
&nbsp;&nbsp;<font color="#0070c0"><strong>三、 包<br />
<br />
</strong>　　首先，你可以看到，JUnit 4使用org.junit.*包而JUnit 3.8使用的是junit.framework.*。当然，为了向后兼容性起见，JUnit 4jar文件发行中加入了这两种包。<br />
<br />
　　<strong>四、 继承</strong><br />
<br />
　　在JUnit4中，测试类不必再扩展junit.framework.TestCase；事实上，它们不必须扩展任何内容。但是，JUnit 4中使用的是注解。为了以一个测试用例方式执行，一个JUnit 4类中至少需要一个@Test注解。例如，如果你仅使用@Before和@After注解而没有至少提供一个@Test方法来编写一个类，那么，当你试图执行它时将得到一个错误：<br />
<br />
java.lang.Exception: No runnable methods. <br />
<br />
　　<strong>五、 断言（Assert）方法</strong><br />
<br />
　　因为在JUnit 4中一个测试类并不继承自TestCase(在JUnit 3.8中，这个类中定义了assertEquals()方法)，所以你必须使用前缀语法(举例来说，Assert.assertEquals())或者（由于JDK5.0）静态地导入Assert类。这样以来，你就可以完全象以前一样使用assertEquals方法(举例来说，assertEquals())。<br />
<br />
　　另外，在JUnit 4中，还引入了两个新的断言方法，它们专门用于数组对象的比较。如果两个数组包含的元素都相等，那么这两个数组就是相等的。<br />
<br />
</font>
<table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1">
    <tbody>
        <tr>
            <td>public static void assertEquals(String message， Object[] expecteds， Object[] actuals);<br />
            public static void assertEquals(Object[] expecteds， Object[] actuals);</td>
        </tr>
    </tbody>
</table>
<br />
　　<font color="#7030a0">由于JDK 5.0的自动装箱机制的出现，原先的１２个assertEquals方法全部去掉了。例如，原先JUnit 3.8中的assertEquals(long，long)方法在JUnit 4中要使用assertEquals(Object，Object)。对于assertEquals(byte，byte)、assertEquals(int，int)等也是这样。这种改进将有助于避免反模式。<br />
<br />
　　在JUnit 4中，新集成了一个assert关键字(见我们的例子中的divide()方法)。你可以象使用assertEquals方法一样来使用它，因为它们都抛出相同的异常(java.lang.AssertionError)。JUnit 3.8的assertEquals将抛出一个junit.framework.AssertionFailedError。注意，当使用assert时，你必须指定Java的"-ea"参数；否则，断言将被忽略。<br />
<br />
　　<strong>六、 预设环境（Fixture）</strong><br />
<br />
　　Fixture是在测试期间初始化和释放任何普通对象的方法。在JUnit 3.8中，你要使用setUp()来实现运行每一个测试前的初始化工作，然后使用tearDown()来进行每个测试后的清理。这两个方法在TestCase类中都得到重载，因此都被唯一定义。注意，我在这个Setup方法使用的是Java5.0内置的@Override注解-这个注解指示该方法声明要重载在超类中的方法声明。在JUnit 4中，则代之使用的是@Before和@After注解；而且，可以以任何命名(在我们的例子中是clearCalculator())来调用这些方法。在本文后面，我将更多地解释这些注解。<br />
<br />
　　<strong>七、 测试</strong><br />
<br />
　　JUnit 3.8通过分析它的签名来识别一个测试方法：方法名必须以"test"为前缀，它必须返回void，而且它必须没有任何参数(举例来说，publicvoidtestDivide())。一个不遵循这个命名约定的测试方法将被框架简单地忽略，而且不抛出任何异常（指示发生了一个错误）。<br />
JUnit 4不使用与JUnit 3.8相同的约定。一个测试方法不必以'test'为前缀，但是要使用@Test注解。但是，正如在前一个框架中一样，一个测试方法也必须返回void并且是无参数的。在JUnit 4中，可以在运行时刻控制这个要求，并且不符合要求的话会抛出一个异常：<br />
<br />
java.lang.Exception: Method xxx should have no parameters<br />
java.lang.Exception: Method xxx should be void<br />
<br />
　　@Test注解支持可选参数。它声明一个测试方法应该抛出一个异常。如果它不抛出或者如果它抛出一个与事先声明的不同的异常，那么该测试失败。在我们的例子中，一个整数被零除应该引发一个ArithmeticException异常。<br />
<br />
　　<strong>八、 忽略一个测试</strong><br />
<br />
　　记住，不能执行多个方法。然而，如果你不想让测试失败的话，你可以仅仅忽略它。那么，在JUnit 3.8中，我们是如何实现临时禁止一个测试的呢?方法是：通过注释掉它或者改变命名约定，这样测试运行机就无法找到它。在我的例子中，我使用了方法名notReadyYetTestMultiply()。它没有以"test"开头，所以它不会被识别出来。现在的问题是，在成百上千的测试中间，你可能记不住重命名这个方法。<br />
<br />
　　在JUnit 4中，为了忽略一个测试，你可以注释掉一个方法或者删除@Test注解(你不能再改变命名约定，否则将抛出一个异常)。然而，该问题将保留：该运行机将不报告这样一个测试。现在，你可以把@Ignore注解添加到@Test的前面或者后面。测试运行机将报告被忽略的测试的个数，以及运行的测试的数目和运行失败的测试数目。注意，@Ignore使用一个可选参数(一个String)，如果你想记录为什么一个测试被忽略的话。<br />
<br />
　　<strong>九、 运行测试</strong><br />
<br />
　　在JUnit 3.8中，你可以选择使用若干运行机：文本型，AWT或者Swing。JUnit 4仅仅使用文本测试运行机。注意，JUnit 4不会显示任何绿色条来通知你测试成功了。如果你想看到任何类型的绿色的话，那么你可能需要使用JUnit扩展或一种集成了JUnit的IDE（例如IDEA或者Eclipse）。<br />
<br />
　　首先，我想使用老式但好用的junit.textui.TestRunner来运行该JUnit 3.8测试类(考虑到使用assert关键字，我使用了-ea参数)。<br />
java -ea junit.textui.TestRunner junit3.CalculatorTest <br />
</font><br />
<table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1">
    <tbody>
        <tr>
            <td>..F.E.<br />
            There was 1 error:<br />
            1) testDivide(junit3.CalculatorTest)java.lang.AssertionError<br />
            at junit3.CalculatorTest.testDivide(CalculatorTest.java:33)<br />
            There was 1 failure:<br />
            1) testSubtract(junit3.CalculatorTest)junit.framework.AssertionFailedError: expected:＜9＞ but was:＜8＞<br />
            at junit3.CalculatorTest.testSubtract(CalculatorTest.java:27)<br />
            FAILURES!!!<br />
            Tests run: 4， Failures: 1， Errors: 1</td>
        </tr>
    </tbody>
</table>
<br />
　　<font color="#00b050">TestDivide产生一个错误，因为断言确定了8/2不等于5。TestSubstract产生一个失败，因为10-2应该等于8，但是在这个实现中存在一个错误：它返回9。<br />
<br />
　　现在，我使用新的org.junit.runner.JUnitCore运行机来运行这两个类。注意，它能执行JUnit 4和JUnit 3.8测试，甚至是这二者的结合。<br />
</font><br />
<table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1">
    <tbody>
        <tr>
            <td>java -ea org.junit.runner.JUnitCore junit3.CalculatorTest<br />
            <br />
            JUnit version 4.1<br />
            <br />
            ..E.E.<br />
            There were 2 failures:<br />
            1) testSubtract(junit3.CalculatorTest)<br />
            junit.framework.AssertionFailedError: expected:＜9＞ but was:＜8＞<br />
            at junit.framework.Assert.fail(Assert.java:47)<br />
            2) testDivide(junit3.CalculatorTest)<br />
            java.lang.AssertionError<br />
            at junit3.CalculatorTest.testDivide(CalculatorTest.java:33)<br />
            FAILURES!!!<br />
            Tests run: 4， Failures: 2<br />
            *** <br />
            <br />
            java -ea org.junit.runner.JUnitCore JUnit 4.CalculatorTest<br />
            <br />
            JUnit version 4.1<br />
            ...E.EI<br />
            There were 2 failures:<br />
            1) subtract(JUnit 4.CalculatorTest)<br />
            java.lang.AssertionError: expected:＜9＞ but was:＜8＞<br />
            at org.junit.Assert.fail(Assert.java:69)<br />
            2) divide(JUnit 4.CalculatorTest)<br />
            java.lang.AssertionError<br />
            at JUnit 4.CalculatorTest.divide(CalculatorTest.java:40)<br />
            FAILURES!!!<br />
            Tests run: 4， Failures: 2</td>
        </tr>
    </tbody>
</table>
<br />
　　<font color="#ff0000">第一个非常明显的区别是，JUnit版本号被显示于控制台中(4.1)。第二个区别是，JUnit 3.8区分失败和错误；JUnit 4则仅使用失败进行简化。一个新奇的地方是，字母"I"，它显示一个测试被忽略。<br />
</font><font color="#ff0000">&nbsp;</font><font color="#ff0000"><strong>十、 高级测试<br />
<br />
</strong>　　现在，我将展示JUnit 4的一些高级特征。列表1(见下载源码)是一个新的测试类-AdvancedTest，它派生自AbstractParent。<br />
<br />
　　(一) 高级预设环境<br />
<br />
　　两个类都使用新的注解@BeforeClass和@AfterClass，还有@Before和@After。表格2展示了在这些注解之间的主要区别。<br />
<br />
　　表格2.@BeforeClass/@AfterClass比较于@Before/@After。<br />
</font><br />
<table cellspacing="0" cellpadding="0" width="90%" align="center" border="1">
    <tbody>
        <tr>
            <td>@BeforeClass和@AfterClass
            <td>@Before和@After
            <tr>
                <td>在每个类中只有一个方法能被注解。
                <td>多个方法能被注解，但其执行的顺序未特别指定，且不运行重载方法。
                <tr>
                    <td>方法名是不相关的
                    <td>方法名是不相关的
                    <tr>
                        <td>每个类运行一次
                        <td>在每个测试方法运行前或运行后运行
                        <tr>
                            <td>在当前类的@BeforeClass方法运行前先运行超类的@BeforeClass方法。在超类中声明的@AfterClass方法将在所有当前类的该方法运行后才运行。
                            <td>超类中的@Before在所有子类的该方法运行前运行。在超类中的@After在在所有子类的该方法运行后才运行。
                            <tr>
                                <td>必须是公共和非静态的。
                                <td>必须是公共和非静态的。
                                <tr>
                                    <td>即使一个@BeforeClass方法抛出一个异常，所有的@AfterClass方法也保证被运行。
                                    <td>即使一个@Before或者@Test方法抛出一个异常，所有的@After方法也保证被运行。</td>
                                </tr>
                            </tbody>
                        </table>
                        <br />
                        　　如果你仅有一次需要分配和释放昂贵的资源，那么@BeforeClass和@AfterClass可能很有用。在我们的例子中，AbstractParent使用这些在startTestSystem()和stopTestSystem()方法上的注解启动和停止整个测试系统。并且它使用@Before和@After初始化和清除系统。子类AdvancedTest也混合使用这些注解。<br />
                        <br />
                        　　在你的测试代码中使用System.out.println不是一种良好的实践习惯；但是，在这个用例中，它有助于理解这些注解被调用的顺序。当我运行AdvancedTest时，我得到如下结果：<br />
                        <br />
                        <table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1">
                            <tbody>
                                <tr>
                                    <td>Start test system //父类的@BeforeClass<br />
                                    Switch on calculator //子类的@BeforeClass<br />
                                    <br />
                                    Initialize test system //第一个测试<br />
                                    Clear calculator<br />
                                    <br />
                                    Initialize test system //第二个测试<br />
                                    Clear calculator<br />
                                    Clean test system<br />
                                    <br />
                                    Initialize test system //第三个测试<br />
                                    Clear calculator<br />
                                    Clean test system<br />
                                    <br />
                                    Initialize test system //第四个测试<br />
                                    Clear calculator<br />
                                    Clean test system<br />
                                    <br />
                                    Switch off calculator //子类的@AfterClass<br />
                                    Stop test system //父类的@AfterClass</td>
                                </tr>
                            </tbody>
                        </table>
                        <br />
                        　　如你所见，@BeforeClass和@AfterClass仅被调用一次，而@Before和@Afterare在每次测试中都要调用。 <br />
                        <br />
                        　　(二) 限时测试<br />
                        <br />
                        　　在前面的例子中，我为squareRoot()方法编写了一个测试用例。记住，在这个方法中存在一个错误-能够导致它无限循环。如果没有结果的话，我想让这个测试在１秒钟后退出。这一功能正是timeout参数所要实现的。@Test注解的第二个可选参数（第一个参数是必需的)可以使一个测试失败，如果该测试花费比一个预先确定的时限(毫秒)还长的时间的话。当我运行该测试时，我得到如下的运行结果：<br />
                        <br />
                        <table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1">
                            <tbody>
                                <tr>
                                    <td>There was 1 failure:<br />
                                    <br />
                                    1) squareRoot(JUnit 4.AdvancedTest)<br />
                                    java.lang.Exception: test timed out after 1000 milliseconds<br />
                                    at org.junit.internal.runners.TestMethodRunner.runWithTimeout(TestMethodRunner.java:68)<br />
                                    at org.junit.internal.runners.TestMethodRunner.运行(TestMethodRunner.java:43)<br />
                                    <br />
                                    FAILURES!!!<br />
                                    Tests run: 4， Failures: 1</td>
                                </tr>
                            </tbody>
                        </table>
                        <br />
                        　　(三) 参数化测试<br />
                        <br />
                        　　在列表1中，我测试了squareRoot（它是square方法而不是squareRoot方法）-通过创建若干测试方法(square2，square4，square5)，这些方法都完成相同的事情（通过被一些变量参数化实现）。其实，现在这里的复制/粘贴技术可以通过使用一个参数化测试用例加以优化(列表2)。<br />
                        <br />
                        　　在列表2（见本文相应下载源码）中的测试用例使用了两个新的注解。当一个类被使用@RunWith注释时，JUnit将调用被参考的类来运行该测试而不是使用缺省的运行机。为了使用一个参数化测试用例，你需要使用运行机org.junit.runners.Parameterized。为了确定使用哪个参数，该测试用例需要一个公共静态方法(在此是data()，但是名字似乎无关)，该方法返回一个Collection，并且被使用@参数加以注解。你还需要一个使用这些参数的公共构造函数。<br />
                        <br />
                        　　当运行这个类，该输出是:<br />
                        <br />
                        <table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1">
                            <tbody>
                                <tr>
                                    <td>java org.junit.runner.JUnitCore JUnit 4.SquareTest<br />
                                    JUnit version 4.1<br />
                                    <br />
                                    .......E<br />
                                    <br />
                                    There was 1 failure:<br />
                                    1) square[6](JUnit 4.SquareTest)<br />
                                    java.lang.AssertionError: expected:＜48＞ but was:＜49＞<br />
                                    at org.junit.Assert.fail(Assert.java:69)<br />
                                    <br />
                                    FAILURES!!!<br />
                                    Tests run: 7， Failures: 1</td>
                                </tr>
                            </tbody>
                        </table>
                        <br />
                        　　在此，共执行了7个测试，好象编写了７个单独的square方法。注意，在我们的测试中出现了一个失败，因为7的平方是49，而不是48。<br />
                        <br />
                        　　(四) 测试集<br />
                        <br />
                        　　为了在JUnit 3.8的一个测试集中运行若干测试类，你必须在你的类中添加一个suite()方法。而在JUnit 4中，你可以使用注解来代之。为了运行CalculatorTest和SquareTest，你需要使用@RunWith和@Suite注解编写一个空类。<br />
                        <br />
                        <table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1">
                            <tbody>
                                <tr>
                                    <td>package JUnit 4;<br />
                                    <br />
                                    import org.junit.runner.RunWith;<br />
                                    import org.junit.runners.Suite;<br />
                                    <br />
                                    @RunWith(Suite.class)<br />
                                    @Suite.SuiteClasses({<br />
                                    CalculatorTest.class，<br />
                                    SquareTest.class<br />
                                    })<br />
                                    public class AllCalculatorTests {}</td>
                                </tr>
                            </tbody>
                        </table>
                        <table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1">
                            <tbody>
                                <tr>
                                    <td>java -ea org.junit.runner.JUnitCore JUnit 4.AllCalculatorTests<br />
                                    JUnit version 4.1<br />
                                    ...E.EI.......E<br />
                                    There were 3 failures:<br />
                                    1) subtract(JUnit 4.CalculatorTest)<br />
                                    java.lang.AssertionError: expected:＜9＞ but was:＜8＞<br />
                                    at org.junit.Assert.fail(Assert.java:69)<br />
                                    2) divide(JUnit 4.CalculatorTest)<br />
                                    java.lang.AssertionError<br />
                                    at JUnit 4.CalculatorTest.divide(CalculatorTest.java:40)<br />
                                    3) square[6](JUnit 4.SquareTest)<br />
                                    java.lang.AssertionError: expected:＜48＞ but was:＜49＞<br />
                                    at org.junit.Assert.fail(Assert.java:69)<br />
                                    FAILURES!!!<br />
                                    Tests run: 11， Failures: 3</td>
                                </tr>
                            </tbody>
                        </table>
                        <br />
                        　　(五) 测试运行机<br />
                        <br />
                        　　在JUnit 4中，广泛地使用测试运行机。如果没有指定@RunWith，那么你的类仍然会使用一个默认运行机(org.junit.internal.runners.TestClassRunner)执行。注意，最初的Calculator类中并没有显式地声明一个测试运行机；因此，它使用的是默认运行机。一个包含一个带有@Test的方法的类都隐含地拥有一个@RunWith。事实上，你可以把下列代码添加到Calculator类上，而且其输出结果会完全一样。<br />
                        <br />
                        <table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1">
                            <tbody>
                                <tr>
                                    <td>import org.junit.internal.runners.TestClassRunner;<br />
                                    import org.junit.runner.RunWith;<br />
                                    @RunWith(TestClassRunner.class)<br />
                                    public class CalculatorTest {<br />
                                    ...<br />
                                    }</td>
                                </tr>
                            </tbody>
                        </table>
                        <br />
                        　　在@Parameterized和@Suite的情况下，我需要一个特定的运行机来执行我的测试用例。这就是为什么我显式地注解了它们。<br />
                        &nbsp;<strong>十一、 工具集成功能<br />
                        <br />
                        </strong>　　当我写本文时，JUnit 4在IDE方面的集成还不是很理想。事实上，如果你试图运行我们刚才看到的那个测试类的话，它们无法工作在任何IDE环境中，因为它们不能被识别为测试类。为了向前兼容性起见，JUnit 4发行中带有一个适配器(junit.framework.JUnit 4TestAdapter)，你必须把它使用于一个suite()方法中。下面是你必须添加到每个类中的代码；这样以来，它们才能为各种IDE，Ant以及JUnit 3.8中的文本运行机所识别：<br />
                        <br />
                        <table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1">
                            <tbody>
                                <tr>
                                    <td>public static junit.framework.Test suite() {<br />
                                    　return new JUnit 4TestAdapter(CalculatorTest.class);<br />
                                    }</td>
                                </tr>
                            </tbody>
                        </table>
                        <br />
                        　　(一) Intellij IDEA<br />
                        <br />
                        　　IDEA 5并没有集成JUnit 4。没有办法，我们只好等待IDEA 6中实现这一集成了。在这个例子中，我使用了较早的发行版本(Demetra build 5321)；但是，参数化测试用例仍不能工作。图1展示了这个CalculatorTest的执行情况(被忽略的测试以一个不同的图标标志)。<br />
                        <br />
                        <table width="90%" align="center">
                            <tbody>
                                <tr>
                                    <td>
                                    <div align="center"><img style="border-left-color: #000000; border-bottom-color: #000000; border-top-color: #000000; border-right-color: #000000" alt="" src="http://dev.yesky.com/imagelist/06/38/l77u38fi32j8.jpg" border="1" /><br />
                                    图1.IDEADemetra仅能运行CalculatorTest。<br />
                                    <img style="border-left-color: #000000; border-bottom-color: #000000; border-top-color: #000000; border-right-color: #000000" alt="" src="http://dev.yesky.com/imagelist/06/38/02gds1913h40.jpg" border="1" /><br />
                                    图2.Eclipse 3.2RC7能够运行测试集类AllCalculatorTests。</div>
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                        <br />
                        　　(二) Eclipse<br />
                        <br />
                        　　我现在使用的是Eclipse的3.2 RC7版本。虽然它还不是一个稳定发行版本，但是其与JUnit 4的集成优于IDEA。上图２展示了在运行AllCalculatorTests类时你能看到的结果。<br />
                        <br />
                        　　如你所见，该参数化测试用例(SquareTest)被描述为7个单独的测试。<br />
                        <br />
                        　　(三) Ant集成<br />
                        <br />
                        　　junit任务当前仅仅支持JUnit 3.8风格测试；这也就是说，你还必须用一个JUnit 4 TestAdapter来包装你的JUnit 4测试；这样，它们才能在Ant中运行。这个＜junit＞任务与其在JUnit 3.8中用法一样：<br />
                        <br />
                        <table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1">
                            <tbody>
                                <tr>
                                    <td>＜!-- Test --＞<br />
                                    ＜target name="test" depends="compile"＞<br />
                                    ＜junit fork="yes" haltonfailure="yes"＞<br />
                                    ＜test name=" JUnit 4.AllCalculatorTests"/＞<br />
                                    ＜formatter type="plain" usefile="false"/＞<br />
                                    ＜classpath refid="classpath"/＞<br />
                                    ＜/junit＞<br />
                                    ＜/target＞</td>
                                </tr>
                            </tbody>
                        </table>
                        <br />
                        　<font color="#ff0000">　<strong>十二、 结论</strong><br />
                        <br />
                        　　有很长一段时间，JUnit简直成了事实上的单元测试框架标准。但是，近来，这个框架似乎无大"动静"：没有重要的发行版本，没有引人注目的新特征出现。这可能是为什么其它测试框架，例如Test-NG开始逐渐占居测试框架市场统治地位的原因。<br />
                        <br />
                        　　随着这个新版本的发行，JUnit又出现了新的转机。如今，它提供了许多新的API，而且现在还使用注解，所以使开发测试用例更为容易。事实上，该JUnit开发者已经开始考虑新的未来的注解问题。例如，你可以在一个依赖于前提(举例来说，你需要在线地执行这个测试)的测试用例上添加一个@Prerequisite注解；或者添加一个能够指定重复次数及时限(举例来说，重复测试5次以确保真正出现了一个时限问题)的@Repeat注解；或者甚至在@Ignore注解上添加一个平台参数（举例来说，@Ignore(platform=macos)，这将只有你在一个MacOS平台上运行时才忽略一个测试)。从本文中你能看到，JUnit的未来依然灿烂辉煌。</font>
<img src ="http://www.blogjava.net/supercrsky/aggbug/162775.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2007-11-24 08:43 <a href="http://www.blogjava.net/supercrsky/articles/162775.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TestSuite小议</title><link>http://www.blogjava.net/supercrsky/articles/162774.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Sat, 24 Nov 2007 00:34:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/162774.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/162774.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/162774.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/162774.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/162774.html</trackback:ping><description><![CDATA[<font color="#ff0000">您定义自己的TestCase，并使用TestRunner来运行测试，事实上TestRunner并不直接运行 TestCase上的单元方法，而是透过<span style="font-weight: bold">TestSuite</span>，TestSuite可以将数个TestCase在一起，而让每个TestCase保持简单。</font><br />
<br />
来看看一个例子：<br />
<ul>
    <li>MathToolTest.java </li>
</ul>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;onlyfun.caterpillar.test;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;onlyfun.caterpillar.MathTool;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;junit.framework.TestCase;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MathToolTest&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;TestCase<br />
<img id="Codehighlighter1_149_386_Open_Image" onclick="this.style.display='none'; Codehighlighter1_149_386_Open_Text.style.display='none'; Codehighlighter1_149_386_Closed_Image.style.display='inline'; Codehighlighter1_149_386_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_149_386_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_149_386_Closed_Text.style.display='none'; Codehighlighter1_149_386_Open_Image.style.display='inline'; Codehighlighter1_149_386_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_149_386_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_149_386_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;MathToolTest(String&nbsp;testMethod)<br />
<img id="Codehighlighter1_192_216_Open_Image" onclick="this.style.display='none'; Codehighlighter1_192_216_Open_Text.style.display='none'; Codehighlighter1_192_216_Closed_Image.style.display='inline'; Codehighlighter1_192_216_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_192_216_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_192_216_Closed_Text.style.display='none'; Codehighlighter1_192_216_Open_Image.style.display='inline'; Codehighlighter1_192_216_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_192_216_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_192_216_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">super</span><span style="color: #000000">(testMethod);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;testGcd()<br />
<img id="Codehighlighter1_243_286_Open_Image" onclick="this.style.display='none'; Codehighlighter1_243_286_Open_Text.style.display='none'; Codehighlighter1_243_286_Closed_Image.style.display='inline'; Codehighlighter1_243_286_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_243_286_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_243_286_Closed_Text.style.display='none'; Codehighlighter1_243_286_Open_Image.style.display='inline'; Codehighlighter1_243_286_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_243_286_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_243_286_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assertEquals(</span><span style="color: #000000">5</span><span style="color: #000000">,&nbsp;MathTool.gcd(</span><span style="color: #000000">10</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">5</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)<br />
<img id="Codehighlighter1_330_384_Open_Image" onclick="this.style.display='none'; Codehighlighter1_330_384_Open_Text.style.display='none'; Codehighlighter1_330_384_Closed_Image.style.display='inline'; Codehighlighter1_330_384_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_330_384_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_330_384_Closed_Text.style.display='none'; Codehighlighter1_330_384_Open_Image.style.display='inline'; Codehighlighter1_330_384_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_330_384_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_330_384_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;junit.textui.TestRunner.run(MathToolTest.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
<font color="#00b0f0">在这个例子中，您并没有看到任何的TestSuite，事实上，如果您没有提供任何的TestSuite，TestRunner会自己建立一个，然后这个 TestSuite会使用反射（reflection）自动找出testXXX()方法。<br />
<br />
如果您要自行生成TestSuite，则在继承TestCase之后，提供静态的（static）的suite()方法，例如：<br />
</font>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_27_72_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_72_Open_Text.style.display='none'; Codehighlighter1_27_72_Closed_Image.style.display='inline'; Codehighlighter1_27_72_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_27_72_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_27_72_Closed_Text.style.display='none'; Codehighlighter1_27_72_Open_Image.style.display='inline'; Codehighlighter1_27_72_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Test&nbsp;suite()&nbsp;</span><span id="Codehighlighter1_27_72_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_27_72_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TestSuite(MathTool.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
<br />
如果您没有提供任何的TestSuite，则TestRunner就会像上面这样自动为您建立一个，并找出testXXX()方法，您也可以如下面定义 suite()方法：<br />
<font color="#0070c0">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_27_151_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_151_Open_Text.style.display='none'; Codehighlighter1_27_151_Closed_Image.style.display='inline'; Codehighlighter1_27_151_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_27_151_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_27_151_Closed_Text.style.display='none'; Codehighlighter1_27_151_Open_Image.style.display='inline'; Codehighlighter1_27_151_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Test&nbsp;suite()&nbsp;</span><span id="Codehighlighter1_27_151_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_27_151_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestSuite&nbsp;suite&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TestSuite(MathTool.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;suite.addTest(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MathToolTest(</span><span style="color: #000000">"</span><span style="color: #000000">testGcd</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;suite;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
&nbsp;<br />
JUnit并没有规定您一定要使用testXXX()这样的方式来命名您的测试方法，如果您要提供自己的方法（当然JUnit 鼓励您使用testXXX()这样的方法名称），则可以如上撰写，为了要能够使用建构函式提供测试方法名称，您的TestCase必须提供如下的建构函式：<br />
</font>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_39_64_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_64_Open_Text.style.display='none'; Codehighlighter1_39_64_Closed_Image.style.display='inline'; Codehighlighter1_39_64_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_39_64_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_39_64_Closed_Text.style.display='none'; Codehighlighter1_39_64_Open_Image.style.display='inline'; Codehighlighter1_39_64_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;MathToolTest(String&nbsp;testMethod)&nbsp;</span><span id="Codehighlighter1_39_64_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_39_64_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">super</span><span style="color: #000000">(testMethod);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
&nbsp;<br />
<br />
<font color="#00b050">如果要加入更多的测试方法，使用addTest()就可以了，suite()方法传回一个TestSuite物件，它与 TestCase都实作了Test介面，TestRunner会调用TestSuite上的run()方法，然后TestSuite会将之委托给 TestCase上的run()方法，并执行每一个testXXX()方法。<br />
<br />
除了组合TestCase之外，您还可以将数个TestSuite组合在一起，例如：</font><br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_27_171_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_171_Open_Text.style.display='none'; Codehighlighter1_27_171_Closed_Image.style.display='inline'; Codehighlighter1_27_171_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_27_171_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_27_171_Closed_Text.style.display='none'; Codehighlighter1_27_171_Open_Image.style.display='inline'; Codehighlighter1_27_171_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Test&nbsp;suite()&nbsp;</span><span id="Codehighlighter1_27_171_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_27_171_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;TestSuite&nbsp;suite</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TestSuite();&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;suite.addTestSuite(TestCase1.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;suite.addTestSuite(TestCase2.</span><span style="color: #0000ff">class</span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;suite;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
&nbsp;<br />
<font color="#ff0000">如此之来，您可以一次运行所有的测试，而不必个别的运行每一个测试案例，您可以写一个运行全部测试的主测试，而在使用TestRunner时呼叫 suite()方法，例如：<br />
</font><font color="#ff0000">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">junit.textui.TestRunner.run(TestAll.suite());</span></div>
<br />
</font><br />
<font color="#ff0000">TestCase与TestSuite都实作了Test介面，其运行方式为 </font><a href="http://caterpillar.onlyfun.net/GossipCN/DesignPattern/CommandPattern.htm"><u><font color="#ff0000">Command 模式</font></u></a><font color="#ff0000"> 的一个实例，而TestSuite可以组合数个TestSuite或TestCase，这是 </font><a href="http://caterpillar.onlyfun.net/GossipCN/DesignPattern/CompositePattern.htm"><u><font color="#ff0000">Composite 模式</font></u></a><font color="#ff0000"> 的一个实例。<br />
</font>
<img src ="http://www.blogjava.net/supercrsky/aggbug/162774.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2007-11-24 08:34 <a href="http://www.blogjava.net/supercrsky/articles/162774.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JUnit4.x与JUnit3.x的一个重要区别</title><link>http://www.blogjava.net/supercrsky/articles/162772.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Fri, 23 Nov 2007 23:56:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/162772.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/162772.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/162772.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/162772.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/162772.html</trackback:ping><description><![CDATA[<p><br />
<span style="font-family: Comic Sans MS">在JUnit3.x中对测试必须继承 TestCase,并且每个方法名必须以test开头.比如:testMethod1</span></p>
<p><span style="font-family: Comic Sans MS">()而在JUnit4.x中不必继承TestCase,采用了注解的方式.只要在测试的方法上加上注解</span></p>
<p><span style="font-family: Comic Sans MS">@Test,即可.在JUnit4.x中如果继承了TestCase,而注解就不起作用了.并且有很重要的一点</span></p>
<p><span style="font-family: Comic Sans MS">就是在JUnit4.x中继承了TestCase后,在OutLine视图中测试单个方法时,结果整个类都run</span></p>
<p><span style="font-family: Comic Sans MS">了. 还有一点就是,在3.x中需要实现setUp和tearDown方法,而在4.x中无需这样,可以自定义</span></p>
<p><span style="font-family: Comic Sans MS">需要在测试前和测试后的方法,在方法前加上Annotation@before,@after就可以了.<br />
对此,在JUnit4.x不必继承TestCase用注解即可对单个方法进行测试.这个问题郁闷了<br />
我半天.解决了,真高兴!</span></p>
<p>&nbsp;<br />
</p>
<img src ="http://www.blogjava.net/supercrsky/aggbug/162772.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2007-11-24 07:56 <a href="http://www.blogjava.net/supercrsky/articles/162772.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EasyMock使用手记</title><link>http://www.blogjava.net/supercrsky/articles/162766.html</link><dc:creator>々上善若水々</dc:creator><author>々上善若水々</author><pubDate>Fri, 23 Nov 2007 23:22:00 GMT</pubDate><guid>http://www.blogjava.net/supercrsky/articles/162766.html</guid><wfw:comment>http://www.blogjava.net/supercrsky/comments/162766.html</wfw:comment><comments>http://www.blogjava.net/supercrsky/articles/162766.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supercrsky/comments/commentRss/162766.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supercrsky/services/trackbacks/162766.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Mock 对象能够模拟领域对象的部分行为，并且能够检验运行结果是否和预期的一致。领域类将通过与 Mock 对象的交互，来获得一个独立的测试环境（引自《 精通 Spring——Java 轻量级架构开发实践 》。 在模仿对象中，我们定义了四个概念： 1 ）目标对象：正在测试的对象 2 ）合作者对象：由目标对象创建或获取的对象 3 ）模仿对象：遵循模仿对象模式的合作者的子类（或实现） ...&nbsp;&nbsp;<a href='http://www.blogjava.net/supercrsky/articles/162766.html'>阅读全文</a><img src ="http://www.blogjava.net/supercrsky/aggbug/162766.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supercrsky/" target="_blank">々上善若水々</a> 2007-11-24 07:22 <a href="http://www.blogjava.net/supercrsky/articles/162766.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>