??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品成人区在线观看,mm1313亚洲精品国产,亚洲精品二三区伊人久久http://www.tkk7.com/margiex/zh-cnMon, 12 May 2025 13:04:36 GMTMon, 12 May 2025 13:04:36 GMT60java web service develop and axis2 to visit asp.net web servicehttp://www.tkk7.com/margiex/archive/2007/10/25/155950.htmlJava,研究之\Java,研究之\Thu, 25 Oct 2007 12:58:00 GMThttp://www.tkk7.com/margiex/archive/2007/10/25/155950.htmlhttp://www.tkk7.com/margiex/comments/155950.htmlhttp://www.tkk7.com/margiex/archive/2007/10/25/155950.html#Feedback0http://www.tkk7.com/margiex/comments/commentRss/155950.htmlhttp://www.tkk7.com/margiex/services/trackbacks/155950.html1. install the following software
jre 1.5 or 1.6,  tomcat 5525, eclipse, axis2

and in eclipse preferences set tomcat to web server, set jre env and set axis2's runtime

2. create a java project and add axis2 runtime library to its build library

test ws client sample code:

public class TestSms
{
private static EndpointReference targetEPR = new EndpointReference(
   "http://cdl:8080/axis2/services/Version");

 public static OMElement getGetLeftElement(){
           OMFactory fac=OMAbstractFactory.getOMFactory();
           OMNamespace omNs=fac.createOMNamespace("此处填写WS的命名空?,"hw");
           OMElement method=fac.createOMElement("WS Ҏ(gu)?,omNs);
           OMElement value = fac.createOMElement("参数一", omNs);
           value.addChild(fac.createOMText(value, "g"));
           method.addChild(value);
          
           value = fac.createOMElement("参数?, omNs);
           value.addChild(fac.createOMText(value, "?"));
           method.addChild(value);
          
         
           return method;
    }
      
       public static void main(String[] args){
              try{
                     Options options=new Options();
                     options.setTo(targetEPR);
                     options.setAction("命名I间/WS Ҏ(gu)?);
                     ServiceClient sender=new ServiceClient();
                     sender.setOptions(options);
                     OMElement sayHello=TestSms.getGetLeftElement();
                     //WSDLConstants.
                    
                     OMElement result=sender.sendReceive(sayHello);
                    
                     OMElement elem = result.getFirstElement();
                     System.out.println(elem.getText());
                     //System.out.println(result);
              }
              catch(Exception axisFault){
                     axisFault.printStackTrace();
              }
       }

}



ref: http://zhangjunhd.blog.51cto.com/113473/23690


Java,研究之\ 2007-10-25 20:58 发表评论
]]>
使用apache http server and tomcat 建立支持负蝲均衡的WEBҎ(gu) (转蝲)http://www.tkk7.com/margiex/archive/2007/03/10/103007.htmlJava,研究之\Java,研究之\Sat, 10 Mar 2007 09:17:00 GMThttp://www.tkk7.com/margiex/archive/2007/03/10/103007.htmlhttp://www.tkk7.com/margiex/comments/103007.htmlhttp://www.tkk7.com/margiex/archive/2007/03/10/103007.html#Feedback0http://www.tkk7.com/margiex/comments/commentRss/103007.htmlhttp://www.tkk7.com/margiex/services/trackbacks/103007.html How to load balance Tomcat 5.5 with Apache on Windows


ref:
http://thought-bytes.blogspot.com/2007/03/how-to-load-balance-tomcat-55-with.html



Java,研究之\ 2007-03-10 17:17 发表评论
]]>
一个解决java 中jsessionid安全性的Ҏ(gu)http://www.tkk7.com/margiex/archive/2006/11/08/79819.htmlJava,研究之\Java,研究之\Wed, 08 Nov 2006 04:32:00 GMThttp://www.tkk7.com/margiex/archive/2006/11/08/79819.htmlhttp://www.tkk7.com/margiex/comments/79819.htmlhttp://www.tkk7.com/margiex/archive/2006/11/08/79819.html#Feedback1http://www.tkk7.com/margiex/comments/commentRss/79819.htmlhttp://www.tkk7.com/margiex/services/trackbacks/79819.htmlhttp://randomcoder.com/articles/jsessionid-considered-harmful

Java,研究之\ 2006-11-08 12:32 发表评论
]]>
windows 2003中JAVA不能使用的解?/title><link>http://www.tkk7.com/margiex/archive/2006/04/04/39260.html</link><dc:creator>Java,研究之\</dc:creator><author>Java,研究之\</author><pubDate>Tue, 04 Apr 2006 14:24:00 GMT</pubDate><guid>http://www.tkk7.com/margiex/archive/2006/04/04/39260.html</guid><wfw:comment>http://www.tkk7.com/margiex/comments/39260.html</wfw:comment><comments>http://www.tkk7.com/margiex/archive/2006/04/04/39260.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/margiex/comments/commentRss/39260.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/margiex/services/trackbacks/39260.html</trackback:ping><description><![CDATA[最qL打不开|页中的JAVAE序, 本来机器上有JAVA开发环? 重装pȝ一般不安装JAVA,反正讄java_home和path中添加javac/java可以了. l果IEL打不开,也不扑ֈ原因. 今天没办法了, 要参加一考试,只好在网上搜索了一? 原来出问题L有原因的.<br /><br />参考官方帮? <a href_cetemp="http://www.java.com/zh_CN/download/help/win_offline.xml">http://www.java.com/zh_CN/download/help/win_offline.xml</a><br /><br />下蝲jreq行环境.安装.<br /><br /><ol><li>双击该图标打开“Java 控制面板? </li><li>在“Java 控制面板”中选择“浏览器”选项? </li><li>保选中“Internet Explorer”、“Netscape”或“Mozilla”旁边的复选框 </li><li>如果未选中Q请选中对应的复选框Qؓ(zhn)的 Web 览器启?JRE </li><li>单击“应用”按?</li></ol><p><strong>Internet Explorer 4.x 及更高版?br /></strong></p><ol><li>单击“工具?->“Internet 选项? </li><li>选择“高U”选项卡,q向下滚动到“Java (Sun)? </li><li>选中“?Java 2 版本”旁边的复选框 </li><li>接下来选择“安全”选项卡,然后选择“自定义U别”按? </li><li>向下滚动到“Java 程序脚本? </li><li>保选中“启用”单选按钮? </li><li>单击“确定”保存?zhn)的首选设|?</li></ol><p>最后不要忘了在q里试一下是否安装成? <a >http://www.java.com/zh_CN/download/help/testvm.xml</a></p><img src ="http://www.tkk7.com/margiex/aggbug/39260.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/margiex/" target="_blank">Java,研究之\</a> 2006-04-04 22:24 <a href="http://www.tkk7.com/margiex/archive/2006/04/04/39260.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>另一点JAVA的不?/title><link>http://www.tkk7.com/margiex/archive/2006/03/10/34616.html</link><dc:creator>Java,研究之\</dc:creator><author>Java,研究之\</author><pubDate>Fri, 10 Mar 2006 02:29:00 GMT</pubDate><guid>http://www.tkk7.com/margiex/archive/2006/03/10/34616.html</guid><wfw:comment>http://www.tkk7.com/margiex/comments/34616.html</wfw:comment><comments>http://www.tkk7.com/margiex/archive/2006/03/10/34616.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/margiex/comments/commentRss/34616.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/margiex/services/trackbacks/34616.html</trackback:ping><description><![CDATA[久未在这里练W了.今天H然惛_Z么JAVA在国内始l对初学者而言不容? 是因为网上的DEMO或示例感觉比.net的少,而且有示例也不是直接能在eclipse或jbuilder中打开? 一般初学者估计IDE不是很熟(zhn)?因此要把CZ代码q行h׃Ҏ(gu)? 更何况要分析别h的代? 相比之下,.net的示例一般是整个工程,而且׃只有vs IDE,因此提供的示例一般是针对此^台的, 要学也就Ҏ(gu)多了.<BR>听说goolge要收购sun java?如果真是q样, 应该是一件好? 又多了一个强有力的竞争? JAVA的前途就光明?<BR><BR>一点个人浅?<img src ="http://www.tkk7.com/margiex/aggbug/34616.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/margiex/" target="_blank">Java,研究之\</a> 2006-03-10 10:29 <a href="http://www.tkk7.com/margiex/archive/2006/03/10/34616.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>岁末结http://www.tkk7.com/margiex/archive/2005/12/30/26064.htmlJava,研究之\Java,研究之\Fri, 30 Dec 2005 07:25:00 GMThttp://www.tkk7.com/margiex/archive/2005/12/30/26064.htmlhttp://www.tkk7.com/margiex/comments/26064.htmlhttp://www.tkk7.com/margiex/archive/2005/12/30/26064.html#Feedback1http://www.tkk7.com/margiex/comments/commentRss/26064.htmlhttp://www.tkk7.com/margiex/services/trackbacks/26064.html
明天是2005q最后一天了, 本想休一天假, 只是最q手头上的项目跟别的公司有关, ׃了n, 烦燥呀, 准LP又在骂了, 要生? 没办法?BR>d底搞了个今年十大目标Q看了一下,没几个完成了Q估计只?0-40%完成了?/P>

整天都在忙,不管是公司的事还是自q研究Q这一q就没有几天晚上?2点之前睡的,在上一个公司经常是晚上11点回ȝ觉,现在q家公司是回M后l搞Q所有的业余爱好都没有了Q买了个DCQ也没怎么用,什么都没有心情Q事情L在那里等着Q视力又下降了,w体感觉不如从前了。记忆力也下降了Q前一阵子的事都不记得了,只知道这两天做了些啥?BR>虽然又长了一岁,其它到是没什么长q?

 

  • 五一节前l于换了家公司,计划之内的事Q也是完成了一计划Q务;
  • 今年开始听《余世维》的讲了,学以致用Q没地方用,听了也没多少长进Q?/LI>
  • 上周l于把两q前买的MP3搞懂如何快进了,便宜货就是不好用Q?/LI>
  • MS出vs2k5Q装上了Q也感觉蛮好用,只是机器跑不动了Q?/LI>
  • 开始用Eclipse开发真正的JAVA目Q发现自q的是很菜Q眼高手低的毛病q是没改Q?/LI>
  • 常年出差在外Q跟准LP吵了无数ơ,已经是家怾饭了Q计划明q结婚,q不知道是否会途中有变Q?/LI>
  • 联系上以前的同学Q可是要么不敢说话,要么是没话_
  • 那个买的房子q有问题Q不是我安漏水Q就是别人家漏水来我,唉,人倒霉了挡都挡不住Q?/LI>
  • 周围的同学和以前的同事要么结婚,要么是准备当爸妈了Q想惌p在外面打工,感觉自己真是没多出息;
  • q有Q想不v来了Q。。?BR>
    每天都是新的一天,努力做好现在的事才是最重要的,把去q的计划拿来Ҏ(gu)Q争取在元旦q几天弄?006q计划了Q日子再艰难Q也得过呀Q毕竟这也是一U生zR?/LI>

 



Java,研究之\ 2005-12-30 15:25 发表评论
]]>
Java目开发笔?/title><link>http://www.tkk7.com/margiex/archive/2005/12/17/24368.html</link><dc:creator>Java,研究之\</dc:creator><author>Java,研究之\</author><pubDate>Sat, 17 Dec 2005 08:02:00 GMT</pubDate><guid>http://www.tkk7.com/margiex/archive/2005/12/17/24368.html</guid><wfw:comment>http://www.tkk7.com/margiex/comments/24368.html</wfw:comment><comments>http://www.tkk7.com/margiex/archive/2005/12/17/24368.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/margiex/comments/commentRss/24368.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/margiex/services/trackbacks/24368.html</trackback:ping><description><![CDATA[<P>最q要在一个项目中使用java, 本来是用.net开发的, 可是验收时用戯求用javaq_,只好q行UL工作? 一直用的?net开? JAVA只是x, 没有深入研究, {实际应用时才发现自己水qx? 问题一?<BR>把最q碰上的问题做些整理:</P> <P>使用JAVAq_的问?<BR>1. 开发工具太? 什么Eclipse, jbuilder{?各有不同, 让h熟?zhn)p旉? 本ؓ以ؓ对JB比较熟?zhn)?又有2006版本? q它吧, 可是才两? 发现自q代码文g中的中文变ؓq? 当然|上有一堆解x? 只是心里不爽, 直接不用? 改ؓeclipse? 操作界面不是很熟(zhn)? 与VS.NET IDEq是有不区? 只是用多了自然就熟?zhn)?<BR>又从|上当了一堆插? 什么tomcat, xml~辑? 没有用myeclipse, 虽然支持JSP,以前用过一? 也不太好? 其它的就没找C么好东西? 旉也不允许, 臛_现在可以调度JAVA代码? JSP的调试再说吧.<BR>2. 开始整的时?发现自己在WEB开发方面熟(zhn)的是VS的ASPX事g模型, 反而不知道如何处理JSP? 只好使用以前ASP的模? 使用form提交, 感觉真是太落伍了, 虽然现在有许多AJAX之类的东? 也支持客L事g模型, 实在没时间研I这些东西了. 先做出来再说. <BR>数据库连接类使用了以前jive中的几个c? 支持在xml中配|连接等, 再自己写了一个类, 从XML中读取SQL语句, 差不多能?<BR>3。在|上搜烦了一把,未找到在eclipse中对web service支持比较好的pluginQ发现版本都比较低,g久未更新了,JB下到是有不错的设计和~译界面Q只是JB其它太烂?/P> <P><BR>字符集问题:<BR>使用java首先pC一个中文字W的昄和处理问? q些问题L很烦, 要对requestq行~码才能解决.<BR>既然使用非MSq_, 数据库可能就不会用到mssql server? 使用mysql, 发现要移植以前的数据q是比较Ҏ(gu), 但mysql的驱动实在不好弄, 刚开始用纯JDBC的驱? l果发现在中文字W的处理上始l有问题, 只好<BR>|上查原? 发现jdbc驱动的版本太? 在判断中文字W上有问? 升驱动E序, 可以插入和显CZ, 但SQL中是中文, 可是q了数据库就是ؕ? 试了N遍也不行, 只好改ؓjdbc-odbc.<BR>但接下来在执行batch sql时又报错? 说mysql odbc driver 的SQL语法? 查了半天, SQL也能在mysql中执行的, 是不能通过JAVA提交执行. 用的是mysql 5.0.X, 支持unicode 的编码徏? 最后只能采用一个折L办法Q自己写一个批量执行SQL的类Q采用“;”分隔多个SQLQ在调用时仍然一行一行的执行Q郁闗?/P> <P>最l的字符集解军_法:<BR>面上要讄字符集的输出格式Q如GBK或GB2312Q另外,如果使用l一的包含文件定义输出字W集Q还是不行,必须在每个页面中单独定义Q也可能是我的INCLUDE方式不对;<BR>数据库连接字W串中也要设|编?<BR>在传递数据到DB的SQLq要对中文进行编?<BR>String key = new String(request.getParameter("txtKey").getBytes("ISO8859_1"));<BR>最后还有一个问题是Q如果TOMCAT~译JSP文g生成的JAVA文g有ؕ码,那么在访问的时候页面上L要报错,什?delete tokens"之类的,此时要删除掉tomcat\work目录下的中间~译代码才行Q?/P> <P><BR>控g及常用库<BR>WEB控g, |上有一堆各U各Llib和控? 但这些东西太费旉, 光是上网扑ְ比较花时间了, 下回来试用也有各U各L问题,<BR>每个控g有自q特色, 而且每个L满了这?满不了那个需? 要都满, q是要收费的才行, 毕竟天下没有多少免费的午?<BR>主要有几个:<BR> 1。数据显C格控Ӟ应该能支持排序,有缓存机Ӟ能分,能设|格式,支持ResultSet或ArrayList之类的,q要有导出excel{功能;最好要能简单用?BR> 2。图表控Ӟ最有名的当然是cewolf/jfreechartQ只是要使用它自己定义的DatasetProducerQ不能直接用ResultSetQ也是个ȝ事,不过的确是很不错的控件了?/P> <P><BR>结<BR>1。经q这ơ移植,发现JAVAq是有许多很牛的地方Q采用hashmap来缓存数据,效率的确很不错,只是用得太多Q缺乏管理机Ӟ有点混ؕ了,下一阶段再重构一下,形成一个管理框架最好;<BR>2。eclipse开发的很不错Q与vs ide差别是比较大Q只是用习惯了之后发现其功能强大,而且可以找些plugin来扩展功能,估计我只是看C点皮毛而已?BR>3。在JAVA下开发,使用Javascript太多Q还没找到更好解军_法,水^有限Q?BR>4。与另一个h一起开发,大家的编E风格和代码不够规范Q用了一些重复的cdҎ(gu)Q这在后期维护是个工作,旉太紧Q项目Lq样Q就没得多少提高了;</P> <P>个h水^实在有限Q上面只是一面之词,目月底才结束,有什么变更再补充?BR></P><img src ="http://www.tkk7.com/margiex/aggbug/24368.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/margiex/" target="_blank">Java,研究之\</a> 2005-12-17 16:02 <a href="http://www.tkk7.com/margiex/archive/2005/12/17/24368.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>办理户口q移http://www.tkk7.com/margiex/archive/2005/10/25/16700.htmlJava,研究之\Java,研究之\Tue, 25 Oct 2005 00:49:00 GMThttp://www.tkk7.com/margiex/archive/2005/10/25/16700.htmlhttp://www.tkk7.com/margiex/comments/16700.htmlhttp://www.tkk7.com/margiex/archive/2005/10/25/16700.html#Feedback0http://www.tkk7.com/margiex/comments/commentRss/16700.htmlhttp://www.tkk7.com/margiex/services/trackbacks/16700.html在N天前到办证中心L了一张清单,上面有需要用到的证明文g。查看了一下家里的癑֮,差不多都有。趁着8月䆾的五天请假,星期四的时候去办理。过E到不是很复杂,只拿了张一式两联的准迁证,当时Ҏ(gu)未在意准迁证上的内容,上面有个有效期的说法。这也只能怪自q心大意了。有效期?0天,到差不多q了一个月之后??0我还在出差,Z让老婆看了一下,才发现是有有效期的,赶紧打电(sh)话问能否廉Q这下麻烦了?7号在成都的时候,本想托h带回乐山l我老爸Q可是我再仔l看了一下,发现必须?.20之前回成都办理好Q算了一下时_已然来不及?9P到办证中心希望能廉一下有效期Q幸好,他们把有效期廉了一个月Q赶快EMSl老爸Q周三收刎ͼ周四C山办理销户ƈ寄回成都Q周六在成都收到??0Q以请了一天假Q到办证中心办理户口及n份证Q按照要求需要提供:户口销戯明,准迁证第二联Qn份证及照片两张。本以ؓ办证中心旁边的照怸心说不能照非w䆾证照Q惨Q又赶快L了一家普通相馆照相。交上各手箋Q终于拿C成都市的户口薄,正准备办w䆾证,说是照相的联|有问题Q不能照Q旁边的一h立刻炸开了锅Q大骂政府办事有问题Q甚x人开始打?sh)话投诉Q没q多久,也不知道如何又搞好了Q反正又排v镉K开始照Q我前面?0个h左右Q差不多{了一个小Ӟ造成老爸的生日午饭也没来得及赶回d。照完后又到柜台办理w䆾证,交上各手l和20元钱Q说两个月之内可以拿C。唉Q真是好事多。不仅花了不邮寄费Q也׃不少旉和精力。政府ؓ何就不改善一下局面,明知效率低,有问题,非得l过q些琐碎的步骤才行。对于没l历q的言Q真的是要耽搁不少旉?BR>

Java,研究之\ 2005-10-25 08:49 发表评论
]]>
Junit4功能 先睹为快. (译文)http://www.tkk7.com/margiex/archive/2005/09/15/13104.htmlJava,研究之\Java,研究之\Thu, 15 Sep 2005 10:02:00 GMThttp://www.tkk7.com/margiex/archive/2005/09/15/13104.htmlhttp://www.tkk7.com/margiex/comments/13104.htmlhttp://www.tkk7.com/margiex/archive/2005/09/15/13104.html#Feedback4http://www.tkk7.com/margiex/comments/commentRss/13104.htmlhttp://www.tkk7.com/margiex/services/trackbacks/13104.html

An early look at JUnit 4

Upcoming release promises evolution in testing

隑ֺU别: ?/p>

Elliotte Harold (elharo@metalab.unc.edu), Adjunct Professor, Polytechnic University

2005-9-15 Q译Q?/p>

原文Q?A >http://www-128.ibm.com/developerworks/java/library/j-junit4.html

JUnit 是JAVA语言事实上的标准试库。JUnit 4是三q以来最具里E碑意义的一ơ发布。它的新Ҏ(gu)主要是针对JAVA5中的标记QannotationQ来化测试,而不是利用子cR反或命名机制。本文将讲述如何使用JUnit 4Q当前前提是你最好具有JUnit的用经验.

JUnit, 由Kent Beck ?Erich Gamma开发,几乎是JAVA开发最重要的第三方工具。正如Martin Fowler 所_“在软g开发领域,从来没有如此少的代码vC如此重要的作用“。由于JUnitQJAVA代码变得更健壮,更可靠,BUG也比以前更少。由于JUnit (由Smalltalk's的SUnit得来) 的出玎ͼ随后产生了许多xUnit的测试工P如nUnit (.NET), pyUnit (Python), CppUnit (C++), dUnit (Delphi) 和其它不同^台及语言的测试相关的工具?/p>

虽然JUnit也只是一个工P但其产生的思想和技术却较其架构更意义重大。单元测试,试先行的编E方式,试驱动的开发方式,q必须由JUNIT实现Q也不一定要用SWing实现GUI界面。JUNIT最q的一ơ更新是在三q前Q但它比其它大多数有BUG的框枉要健壮,更重要的是,JAVA一直在改进。现在JAVA支持泛型Q枚举,可变长度参数Q以及标记语aQ开创了开发可重用框架的新局面)?/p>

JUnit's的停滞不前得那些想要变革的开发h员换其它试工具Q挑战者有Bill Venners的Artima SuiteRunner和Cedric Beust的TestNGQ这些工具库虽然有值得推荐的功能,但没有Q何一ƄC能与JUNIT相比Q没有Q何一Ƒַ兯其它业界产品如Ant, Maven, Eclipseq泛支持Q因此Beck 和Gamma双开始利用JAVA5的新Ҏ(gu)来开发新版的JUNITQ目的是利用JAVA5中的标记Ҏ(gu)得单元测试开发更Ҏ(gu)。Beck_“JUNIT4的主要目的是通过化JUNIT的用鼓励更多的开发h员写更多的测试”。虽然会与以前的版本兼容Q但JUNIT4与从JUNIT1.0开始的版本相比会有一个非常大的变化.

注意: 修改基本框架是一把双刃剑Q虽然JUNIT4的目的是清晰的,但细节仍有许多不同,因此本文只是一个简单的介绍Qƈ不是最l文档.

试Ҏ(gu)

以前所有版本的JUNIT都用命名机制和反射来定位测试,下面的代码测?+1= 2Q?/p>
import junit.framework.TestCase;

public class AdditionTest extends TestCase {

  private int x = 1;
  private int y = 1;
  
  public void testAddition() {
    int z = x + y;
    assertEquals(2, z);
  }

}

而在JUNIT 4中,试Ҏ(gu)?STRONG>@Test 标记说明Q如下:

import org.junit.Test;
import junit.framework.TestCase;

public class AdditionTest extends TestCase {

  private int x = 1;
  private int y = 1;
  
  @Test public void testAddition() {
    int z = x + y;
    assertEquals(2, z);
  }

}

使用标记的好处是你不用将所有测试方法命名ؓ testFoo(), testBar(){等?test"开头的Ҏ(gu)Q下面的Ҏ(gu)也同样可以工作:

import org.junit.Test;
import junit.framework.TestCase;

public class AdditionTest extends TestCase {

  private int x = 1;
  private int y = 1;
  
  @Test public void additionTest() {
    int z = x + y;
    assertEquals(2, z);
  }

}

下面的代码也同样正确Q?/p>
import org.junit.Test;
import junit.framework.TestCase;

public class AdditionTest extends TestCase {

  private int x = 1;
  private int y = 1;
  
  @Test public void addition() {
    int z = x + y;
    assertEquals(2, z);
  }

}

q种命名机制最大的优点是更适合你的待测试类或方法名Uͼ例如Q你可以使用ListTEst.contains()试 List.contains();使用ListTest.addAll()试 List.add(){等Q?/code>

TestCaseq可以l用,但你没有必须再扩展ؓ子类Q只要你声明了@TestQ你可以测试方法放在Q何类中,当然如要讉Kassert{方法,你必要引用junit.Assertc,如下Q?/code>

import org.junit.Assert;

public class AdditionTest {

  private int x = 1;
  private int y = 1;
  
  @Test public void addition() {
    int z = x + y;
    Assert.assertEquals(2, z);
  }

}

你也可以使用JDK5中的新特?static import)使得跟以前版本一L单:

import static org.junit.Assert.assertEquals;

public class AdditionTest {

  private int x = 1;
  private int y = 1;
  
  @Test public void addition() {
    int z = x + y;
    assertEquals(2, z);
  }

}

q种Ҏ(gu)试受保护的Ҏ(gu)非常Ҏ(gu)Q因Z可以在测试类中承有受保护方法的c.



Back to top


SetUp 和TearDown

JUnit 3 ?STRONG>test runners 会在每个试之前自动调用 setUp()Ҏ(gu)。此Ҏ(gu)主要用于初始化变量,打开日志Q重|环境变量等。下面是XOM's XSLTransformTest中的 setUp()Ҏ(gu)Q?/code>

protected void setUp() {
        
    System.setErr(new PrintStream(new ByteArrayOutputStream()));
        
    inputDir = new File("data");
    inputDir = new File(inputDir, "xslt");
    inputDir = new File(inputDir, "input");
        
}

在JUnit 4中,你仍然可以在每个试前初始化变量和配|环?Q然而,q些操作可以不用在Setup()中完成,你可以在初始化方法前面添?STRONG>@Beforer 来表C,如下Q?

@Before protected void initialize() {
        
    System.setErr(new PrintStream(new ByteArrayOutputStream()));
        
    inputDir = new File("data");
    inputDir = new File(inputDir, "xslt");
    inputDir = new File(inputDir, "input");
        
}

你也可以有多个方法标记有QBeforeQ所有方法都会在每个试之前执行Q?

@Before protected void findTestDataDirectory() {
    inputDir = new File("data");
    inputDir = new File(inputDir, "xslt");
    inputDir = new File(inputDir, "input");
}
    
 @Before protected void redirectStderr() {
    System.setErr(new PrintStream(new ByteArrayOutputStream()));
}

清除环境与JUNIT3 差不多,在JUNIT3中?tearDown()Ҏ(gu)Q下面的代码是结束测试时回收内存Q?/code>

protected void tearDown() {
  doc = null;
  System.gc();   
} 

在JUnit 4中,你还可以使用@After标记来说明:

@After protected void disposeDocument() {
  doc = null;
  System.gc();   
} 

?@Before一P你也可以有多个标记有 @After的清除方法,每个都会在执行完每个试后执行?/code>

最后,你不需要在父类中明调用这些初始化或清除方法.test runner会自动调用这些标记的Ҏ(gu)Q子cM的@BeforeҎ(gu)在父cȝ@BeforeҎ(gu)之后执行Q这与构造函数的执行序一PQ而@AfterҎ(gu)刚好相反Q子cM的@AfterҎ(gu)先执行.然而,多个@Before和@AfterҎ(gu)的执行顺序就是未知的Q?/p>

试集范围的初始?/STRONG>

JUnit 4中引入了一JUNIT3没有的新Ҏ(gu),cȝ别的setUp()和tearDown()Q即在一个类的所有测试前执行初始化,q在所有测试完成后执行清除?

例如Q一个测试类中的每个试都要用到一个数据库q接或网l连接,或其它很耗资源初始化或释攄资源Q用不着在每个测试方法前后进行操作,而只需要在试cd始前后执行即可。下面的CZ是用第三方的库q行错误Q在执行所有测试前错误先重定向到非标准输出,然后在所有测试结束后再输出到需要的地方Q这样就不会影响到测试过E中产生的其它信息?/p>
// This class tests a lot of error conditions, which
// Xalan annoyingly logs to System.err. This hides System.err 
// before each test and restores it after each test.
private PrintStream systemErr;
    
@BeforeClass protected void redirectStderr() {
    systemErr = System.err; // Hold on to the original value
    System.setErr(new PrintStream(new ByteArrayOutputStream()));
}
    
@AfterClass protected void tearDown() {
    // restore the original value
    System.setErr(systemErr);
}

上面的操作没有必d每个试前后执行。然而要注意的是Q这U方法可能媄响测试间的结果,如果一个测试改变了初始化的对象Q而这个对象可能是其它试的输入,那么试的结果可能不正确Q这U方法将依赖试的顺序ƈ可能引入BUG。当优化试性能Qƈ且当你改q了配置和基准测试后而仍然很慢时Q如数据库连接或|络问题Q你才需要考虑使用q种Ҏ(gu)。只有这P你才能每天执行多ơ测试?



Back to top


异常试

异常试是JUNIT4中的最大的改进Q以前异常测试是通过try catch实现Q当抛出异常Ӟ在try的最后添加一条fail()语句实现Q如下:

public void testDivisionByZero() {
    
    try {
        int n = 2 / 0;
        fail("Divided by zero!");
    }
    catch (ArithmeticException success) {
        assertNotNull(success.getMessage());
    }
    
}

q种Ҏ(gu)不仅隄Q而且造成无论成功或失败,代码覆盖工具都不能执行某些代码.而在JUnit 4中,你可以在要抛出异常的代码中添加标记来声明一个异常是期望的:

@Test(expected=ArithmeticException.class) public void divideByZero() {
    int n = 2 / 0;
}

如果没有异常抛出Q上面的试则会p|Q如果你想知道异常的详细信息或其它情况,你还是要使用try catch才行

Back to top


需要忽略的试

也许你有些测试需要很长时间才能执行完成,q是这个测试应该跑得快Q而是它做的很复杂和很慢的工作造成的.如访问远E网l错误,需要很久才能有反馈Q如果你不想让这U测试破坏你整个试q程Q你可能惌q这个测试.当然也有可能某个试出控制范围而失败.如W3C XInclude试集中自动识别一些JAVA不支持的Unicode代码Qؓ了防止这些测试L通不q,可以使用标记 @Ignore跌q些,如下Q?/code>

// Java doesn't yet support the UTF-32BE and UTF32LE encodings
    @Ignore public void testUTF32BE() 
      throws ParsingException, IOException, XIncludeException {
      
        File input = new File(
          "data/xinclude/input/UTF32BE.xml"
        );
        Document doc = builder.build(input);
        Document result = XIncluder.resolve(doc);
        Document expectedResult = builder.build(
          new File(outputDir, "UTF32BE.xml")
        );
        assertEquals(expectedResult, result);
                
    }

test runner不会执行q些试Q但会说明这些测试被跌了。在命o行测试界面中Q字母“I”会表示试跌Q或“E”表C测试失败,而不是用点?"表示成功Q?/p>
$ java -classpath .:junit.jar org.junit.runner.JUnitCore nu.xom.tests.XIncludeTest
JUnit version 4.0rc1
.....I..
Time: 1.149

OK (7 tests)

要注意的是,假设q些试׃某种理由攑֜最开始,如果你以后一直忽略这些测试,那些需要被试的代码可能有问题而不会被到。因此忽略测试只是一个时解x法,q不是一个解决Q何问题的真正办法?



Back to top


旉试

性能试是单元测试中最头疼的问题,JUnit 4也未完全解决此问题, 你可以在JUNIT4的测试方法中d一个时间参数。如果测试时间超q参敎ͼ则测试失败。如下,如果试旉过0.5U,则此试p|Q?/p>

@Test(timeout=500) public void retrieveAllElementsInDocument() {
    doc.query("http://*");
} 

除基准性能试外,旉试在网l测试方面也很有用.如果一个远端的L或数据当掉或太慢Q你可以跌此测试而不用阻塞在q里Q好的测试集可以在作了一些改动后很快的一遍一遍的执行Q可能一天数十次Q设|一个超时让试更快的执行,下面的示例中如果分析http://www.ibiblio.org/xml 的时间超q2U,则测试失败.


@Test(timeout=2000) 
  public void remoteBaseRelativeResolutionWithDirectory()
   throws IOException, ParsingException {
      builder.build("http://www.ibiblio.org/xml");
  } 



Back to top


新的断言

JUnit 4 增加了两上断文方法用于比较数l:


public static void assertEquals(Object[] expected, Object[] actual)
public static void assertEquals(String message, Object[] expected, 
Object[] actual)

q两个方法采用最直接Ҏ(gu)比较Q如果数l长度相同,且每个对应的元素相同Q则比较成功Q否则不成功Q参CؓI的情况也作了考虑Q?

Back to top


需要补充的地方

JUnit 4是一个非常基本的框架Q还不是以前版本的升U。JUNIT3的开发h员会发现有些功能没有?

  • 最大的特点是没有GUI试界面Q当试正确时是l色条,而出错时U色的,你也可以在Eclipse中集成JUNIT使用Q但JUNIT4既没有AWT也没有SWING的GUI试界面Q?/FONT>
  • 另一个让人吃惊的是失败(期望错误Q和错误Q未预计的异帔R误)没有明显区别Q在JUNIT3中开发h员可以区分这两种情况Q而在JUNIT4中不行;
  • 最后一个特Ҏ(gu)JUNIT中没有用于徏立一堆测试类?CODE>suite()Ҏ(gu)Q取而代之的是,采用变长参数传递未知数量的试ltest runner?/CODE>

没有GUI试界面的确不方便,但其它改变简化了JUNIT的用,从当前JUNIT的操作手册和FAQ的数量就知道Q而JUNIT4的文档将不会需要这么多?



Back to top


~译和运行JUnit 4

现在JUnit 4q没有发布编译版本,如果想体验版本的乐趣Q则需要从CVS中获取源代码。分支标{是"Version4" (see Resources ).要注意的是大部分文档是根据JUNIT3~写的,q未同步更新。需要Java 5才能~译JUnit 4Q因为大量用了标记Q泛型其其它JDK5中的新特性?

执行试的命令行方式与JUNIT3有点区别Q你现在要?org.junit.runner.JUnitCore c进行测试,如下Q?


$ java -classpath .:junit.jar org.junit.runner.JUnitCore 
  TestA TestB TestC...
JUnit version 4.0rc1

Time: 0.003

OK (0 tests)

兼容?/STRONG>

Beck 和Gamma在努力保持后向和前向兼容性。JUnit 4可以直接q行Ҏ(gu)JUNIT3~写的测试类Q而不用Q何修改,直接各试cȝ全名传递给test runner卛_Qtest runner会根据不同的试c调用不同的试框架版本Q?

后向兼容性有炚w烦,卛_JUNIT3中执行根据JUNIT4写的试c,之所以要q样是因为在一个集成环境如Ecplise中,不需要升U到JUNIT4也可以测试JUNIT4的测试类Q从而避免工具IDE的升U。ؓ了让JUNIT4的测试类在JUNI3中能执行Q你需要一个适配c?CODE>JUnit4TestAdapter装JUNIT3的测试类Q如下代码:

public static junit.framework.Test suite() {
  return new JUnit4TestAdapter(AssertionTest.class);    
}

而JAVA斚wQJUNIT4一点兼Ҏ(gu)都没有Q因为完全依赖于JDK5的新Ҏ(gu),因此不可能在JAVA1.4上面执行JUNIT4?/p>

Back to top


q有...

JUnit 4q未l束Q还有许多需要补充,如文档,现在不推荐将以前的测试类升到JUNIT4。当然JUNIT4的开发速度很快Q其计划也很快会实现QJAVA1.4的开发h员仍然可以用JUNIT3.8Q而用JAVA5的h员可以考虑是否采用JUNIT4了,因ؓ在特性上更适合?



Back to top


资源


下蝲试版本
  • JUnit 4: Download the newest version of JUnit the SourceForge CVS repository; be sure to use the branch tag "Version4."



Java,研究之\ 2005-09-15 18:02 发表评论
]]>
tomcat4中配|httpshttp://www.tkk7.com/margiex/archive/2005/04/19/3461.htmlJava,研究之\Java,研究之\Tue, 19 Apr 2005 06:51:00 GMThttp://www.tkk7.com/margiex/archive/2005/04/19/3461.htmlhttp://www.tkk7.com/margiex/comments/3461.htmlhttp://www.tkk7.com/margiex/archive/2005/04/19/3461.html#Feedback0http://www.tkk7.com/margiex/comments/commentRss/3461.htmlhttp://www.tkk7.com/margiex/services/trackbacks/3461.html2. 然后dkeystore:
%JAVA_HOME%\bin\keytool -delete -alias tomcat -keypass changeit

%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keypass changeit -keyalg RSA

%JAVA_HOME%\bin\keytool -export -alias tomcat -keypass changeit  -file
%FILE_NAME%

%JAVA_HOME%\bin\keytool -import -file server.crt -keypass changeit
-keystore %JAVA_HOME%/jre/lib/security/cacerts

%JAVA_HOME%\bin\keytool -import -file server.crt -keystore
%JAVA_HOME%\jre\lib\security\cacert

3. 然后?catalina_home%\conf\server.xml.中取消SSL的注?

4. visit http://localhost:8443/ test it.
参?nbsp;http://jakarta.apache.org/tomcat/tomcat-4.0-doc/ssl-howto.html.

Java,研究之\ 2005-04-19 14:51 发表评论
]]>
վ֩ģ壺 ݺɫúݺݺۺ| 18ֹۿ˽ӰԺ| һ϶| ɫAVպ߹ۿ| 24Сʱձwwwѵ| ŷ޾Ʒþ| ˾Ʒҹapp | ޾Ʒһ߾þ| ߲ѹۿ| һþaþþƷ| ĻѸƵ| vaþþþúݺ| 99ѹۿƵ| ޹va߹ۿַ| ëƬ18ŮëƬ| վɫƵѿ½| պɬɬҹ˽ӰԺ| Ůһһ鴤Ƶ | ˳7777Ӱ߹ۿ| Ʒþþþa | ޾ɫ߲| պѸһëƬ| Ʒһþ | ۺһ| 벻AV鶹| ߿վ| Ƭ߹ۿ| AVרպ| һѿ| һ| һëƬ߲| պƵ߹ۿ| AV˵߹ۿ| ޾ƷƷ벻| 99ֻоƷѲ| Ʒާѡ2021| պAvҹҹˬ| ѿһëƬ| ѹۿ| Ʒ߲ҳ| һַ|