2005年9月15日

1. 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 方法名",omNs);
           OMElement value = fac.createOMElement("参数一", omNs);
           value.addChild(fac.createOMText(value, "值一"));
           method.addChild(value);
          
           value = fac.createOMElement("参数二", omNs);
           value.addChild(fac.createOMText(value, "值2"));
           method.addChild(value);
          
         
           return method;
    }
      
       public static void main(String[] args){
              try{
                     Options options=new Options();
                     options.setTo(targetEPR);
                     options.setAction("命名空间/WS 方法名");
                     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
posted @ 2007-10-25 20:58 Java,研究之路 阅读(366) | 评论 (0)编辑 收藏
 

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

posted @ 2007-03-10 17:17 Java,研究之路 阅读(370) | 评论 (0)编辑 收藏
 
http://randomcoder.com/articles/jsessionid-considered-harmful
posted @ 2006-11-08 12:32 Java,研究之路 阅读(1250) | 评论 (1)编辑 收藏
 
最近总是打不开网页中的JAVA程序, 本来机器上有JAVA开发环境, 重装系统一般不安装JAVA,反正设置java_home和path中添加javac/java就可以了. 结果IE总是打不开,也不找到原因. 今天没办法了, 要参加一项考试,只好在网上搜索了一下, 原来出问题总是有原因的.

参考官方帮助: http://www.java.com/zh_CN/download/help/win_offline.xml

下载jre运行环境.安装.

  1. 双击该图标打开“Java 控制面板”
  2. 在“Java 控制面板”中选择“浏览器”选项卡
  3. 确保选中“Internet Explorer”、“Netscape”或“Mozilla”旁边的复选框
  4. 如果尚未选中,请选中对应的复选框,为您的 Web 浏览器启用 JRE
  5. 单击“应用”按钮

Internet Explorer 4.x 及更高版本

  1. 单击“工具”-->“Internet 选项”
  2. 选择“高级”选项卡,并向下滚动到“Java (Sun)”
  3. 选中“使用 Java 2 版本”旁边的复选框
  4. 接下来选择“安全”选项卡,然后选择“自定义级别”按钮
  5. 向下滚动到“Java 小程序脚本”
  6. 确保选中“启用”单选按钮。
  7. 单击“确定”保存您的首选设置。

最后不要忘了在这里测试一下是否安装成功: http://www.java.com/zh_CN/download/help/testvm.xml

posted @ 2006-04-04 22:24 Java,研究之路 阅读(3219) | 评论 (0)编辑 收藏
 
久未在这里练笔了.今天突然想到为什么JAVA在国内始终对初学者而言不容易. 是因为网上的DEMO或示例感觉比.net的少,而且有示例也不是直接能在eclipse或jbuilder中打开的. 一般初学者估计IDE不是很熟悉,因此要把示例代码运行起来就不容易了, 更何况要分析别人的代码. 相比之下,.net的示例一般是整个工程,而且由于只有vs IDE,因此提供的示例一般是针对此平台的, 要学也就容易多了.
听说goolge要收购sun java了,如果真是这样, 应该是一件好事, 又多了一个强有力的竞争者, JAVA的前途就光明了.

一点个人浅见.
posted @ 2006-03-10 10:29 Java,研究之路 阅读(417) | 评论 (1)编辑 收藏
 


明天就是2005年最后一天了, 本想休一天假, 只是最近手头上的项目跟别的公司有关, 脱不了身, 烦燥呀, 准LP又在骂了, 要生存, 没办法。
去年底搞了个今年十大目标,看了一下,没几个完成了,估计只有30-40%完成了。

整天都在忙,不管是公司的事还是自己的研究,这一年就没有几天晚上是12点之前睡的,在上一个公司经常是晚上11点回去睡觉,现在这家公司是回去之后继续搞,所有的业余爱好都没有了,买了个DC,也没怎么用,什么都没有心情,事情总是在那里等着,视力又下降了,身体感觉不如从前了。记忆力也下降了,前一阵子的事都不记得了,只知道这两天做了些啥。
虽然又长了一岁,其它到是没什么长进:

 

  • 五一节前终于换了家公司,计划之内的事,也算是完成了一项计划任务;
  • 今年开始听《余世维》的讲座了,学以致用,没地方用,听了也没多少长进;
  • 上周终于把两年前买的MP3搞懂如何快进了,便宜货就是不好用;
  • MS出vs2k5,装上了,也感觉蛮好用,只是机器跑不动了;
  • 开始使用Eclipse开发真正的JAVA项目,发现自己真的是很菜,眼高手低的毛病还是没改;
  • 常年出差在外,跟准LP吵了无数次,已经是家常便饭了,计划明年结婚,还不知道是否会途中有变;
  • 联系上以前的同学,可是要么不敢说话,要么就是没话说;
  • 那个买的房子还有问题,不是我家里漏水,就是别人家漏水来淹我,唉,人倒霉了挡都挡不住;
  • 周围的同学和以前的同事要么结婚,要么就是准备当爸妈了,想想自己还在外面打工,感觉自己真是没多少出息;
  • 还有,想不起来了,。。。

    每天都是新的一天,努力做好现在的事才是最重要的,把去年的计划拿来改改,争取在元旦这几天弄个2006年计划了,日子再艰难,也得过呀,毕竟这也是一种生活。

 

posted @ 2005-12-30 15:25 Java,研究之路 阅读(414) | 评论 (1)编辑 收藏
 

最近要在一个项目中使用java, 本来是用.net开发的, 可是验收时用户要求用java平台,只好进行移植工作了. 一直使用的是.net开发, JAVA只是关注, 没有深入研究, 等实际应用时才发现自己水平有限, 问题一堆.
把最近碰上的问题做些整理:

使用JAVA平台的问题:
1. 开发工具太多, 什么Eclipse, jbuilder等,各有不同, 让人熟悉就花时间了, 本为以为对JB比较熟悉,又有2006版本了, 就用它吧, 可是才两天, 就发现自己的代码文件中的中文变为乱码了, 当然网上有一堆解决方案, 只是心里不爽, 直接不用了, 改为eclipse了, 操作界面不是很熟悉, 与VS.NET IDE还是有不少区别, 只是用多了自然就熟悉了,
又从网上当了一堆插件, 什么tomcat, xml编辑器, 没有用myeclipse, 虽然支持JSP,以前用过一下, 也不太好用, 其它的就没找到什么好东西了, 时间也不允许, 至少现在可以调度JAVA代码了, JSP的调试再说吧.
2. 开始整的时候,发现自己在WEB开发方面熟悉的是VS的ASPX事件模型, 反而不知道如何处理JSP了, 只好使用以前ASP的模式, 使用form提交, 感觉真是太落伍了, 虽然现在有许多AJAX之类的东西, 也支持客户端事件模型, 实在没时间研究这些东西了. 先做出来再说.
数据库连接类使用了以前jive中的几个类, 支持在xml中配置连接等, 再自己写了一个类, 从XML中读取SQL语句, 差不多能用.
3。在网上搜索了一把,未找到在eclipse中对web service支持比较好的plugin,发现版本都比较低,似乎久未更新了,JB下到是有不错的设计和编译界面,只是JB其它太烂。


字符集问题:
使用java首先就要碰上一个中文字符的显示和处理问题, 这些问题总是很烦, 要对request进行编码才能解决.
既然使用非MS平台, 数据库可能就不会用到mssql server了, 使用mysql, 发现要移植以前的数据还是比较容易, 但mysql的驱动实在不好弄, 刚开始使用纯JDBC的驱动, 结果发现在中文字符的处理上始终有问题, 只好
网上查原因, 发现jdbc驱动的版本太低, 在判断中文字符上有问题, 升级驱动程序, 可以插入和显示了, 但SQL中是中文, 可是进了数据库就是乱码, 试了N遍也不行, 只好改为jdbc-odbc.
但接下来在执行batch sql时又报错了, 说mysql odbc driver 的SQL语法错, 检查了半天, SQL也能在mysql中执行的, 就是不能通过JAVA提交执行. 用的是mysql 5.0.X, 支持unicode 的编码建表. 最后只能采用一个折衷的办法,自己写一个批量执行SQL的类,采用“;”分隔多个SQL,在调用时仍然一行一行的执行,郁闷。

最终的字符集解决办法:
页面上要设置字符集的输出格式,如GBK或GB2312,另外,如果使用统一的包含文件定义输出字符集,还是不行,必须在每个页面中单独定义,也可能是我的INCLUDE方式不对;
数据库连接字符串中也要设置编码;
在传递数据到DB的SQL还要对中文进行编码;
String key = new String(request.getParameter("txtKey").getBytes("ISO8859_1"));
最后还有一个问题是,如果TOMCAT编译JSP文件生成的JAVA文件有乱码,那么在访问的时候页面上总是要报错,什么"delete tokens"之类的,此时要删除掉tomcat\work目录下的中间编译代码才行;


控件及常用库
WEB控件, 网上有一堆各种各样的lib和控件, 但这些东西太浪费时间, 光是上网找就比较花时间了, 下回来试用也有各种各样的问题,
每个控件有自己的特色, 而且每个总是满足了这个,满足不了那个需求, 要都满足, 还是要收费的才行, 毕竟天下没有多少免费的午餐;
主要有几个:
 1。数据显示表格控件,应该能支持排序,有缓存机制,能分页,能设置格式,支持ResultSet或ArrayList之类的,还要有导出excel等功能;最好要能简单使用。
 2。图表控件,最有名的当然是cewolf/jfreechart,只是要使用它自己定义的DatasetProducer,不能直接使用ResultSet,也是个麻烦事,不过的确是很不错的控件了。


小结
1。经过这次移植,发现JAVA还是有许多很牛的地方,采用hashmap来缓存数据,效率的确很不错,只是用得太多,缺乏管理机制,有点混乱了,下一阶段再重构一下,形成一个管理框架最好;
2。eclipse开发的确很不错,与vs ide差别是比较大,只是使用习惯了之后发现其功能强大,而且可以找些plugin来扩展功能,估计我只是看到了点皮毛而已。
3。在JAVA下开发,使用Javascript太多,还没找到更好解决办法,水平有限;
4。与另一个人一起开发,大家的编程风格和代码不够规范,使用了一些重复的类和方法,这在后期维护是个工作,时间太紧,项目总是这样,就没得多少提高了;

个人水平实在有限,上面只是一面之词,项目月底才结束,有什么变更再补充。

posted @ 2005-12-17 16:02 Java,研究之路 阅读(1478) | 评论 (3)编辑 收藏
 
不用说,这种事情一般人如果没有经历过,或旁边没有人经历过,要想搞得很清楚,一会儿就搞定是不可能的。
在N天前就到办证中心去拿了一张清单,上面有需要用到的证明文件。查看了一下家里的百宝箱,差不多都有。趁着8月份的五天请假,星期四的时候去办理。过程到不是很复杂,只拿了张一式两联的准迁证,当时根本就未在意准迁证上的内容,上面有个有效期的说法。这也只能怪自己粗心大意了。有效期是40天,到差不多过了一个月之后即9。10我还在出差,顺便让老婆看了一下,才发现是有有效期的,赶紧打电话问能否延长,这下麻烦了。17号在成都的时候,本想托人带回乐山给我老爸,可是我再仔细看了一下,发现必须在9.20之前回成都办理好,算了一下时间,已然来不及。19号,到办证中心希望能延长一下有效期,幸好,他们把有效期延长了一个月,赶快EMS给老爸,周三收到,周四到乐山办理销户并寄回成都,周六在成都收到。9。30,以请了一天假,到办证中心办理户口及身份证,按照要求需要提供:户口销户证明,准迁证第二联,身份证及照片两张。本以为办证中心旁边的照相中心说不能照非身份证照,惨,又赶快去找了一家普通相馆照相。交上各手续,终于拿到了成都市的户口薄,正准备办身份证,说是照相的联网有问题,不能照,旁边的一群人立刻炸开了锅,大骂政府办事有问题,甚至有人开始打电话投诉,没过多久,也不知道如何又搞好了,反正又排起长队开始照,我前面有20个人左右,差不多等了一个小时,造成老爸的生日午饭也没来得及赶回去吃。照完后又到柜台办理身份证,交上各手续和20元钱,说两个月之内可以拿到了。唉,真是好事多磨。不仅花了不少邮寄费,也花了不少时间和精力。政府为何就不改善一下局面,明知效率低,有问题,非得经过这些琐碎的步骤才行。对于没经历过的人而言,真的是要耽搁不少时间。
posted @ 2005-10-25 08:49 Java,研究之路 阅读(489) | 评论 (0)编辑 收藏
 

An early look at JUnit 4

Upcoming release promises evolution in testing

难度级别: 中

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

2005-9-15 (译)

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

JUnit 是JAVA语言事实上的标准测试库。JUnit 4是三年以来最具里程碑意义的一次发布。它的新特性主要是针对JAVA5中的标记(annotation)来简化测试,而不是利用子类、反射或命名机制。本文将讲述如何使用JUnit 4,当前前提是你最好具有JUnit的使用经验.

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

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

JUnit's的停滞不前使得那些想要变革的开发人员换其它测试工具.挑战者有Bill Venners的Artima SuiteRunner和Cedric Beust的TestNG.这些工具库虽然有值得推荐的功能,但没有任何一款的地位能与JUNIT相比,没有任何一款工具被其它业界产品如Ant, Maven, Eclipse广泛支持.因此Beck 和Gamma双开始利用JAVA5的新特性来开发新版的JUNIT,目的是利用JAVA5中的标记特性使得单元测试开发更容易。Beck说:“JUNIT4的主要目的是通过简化JUNIT的使用鼓励更多的开发人员写更多的测试”。虽然会与以前的版本兼容,但JUNIT4与从JUNIT1.0就开始的版本相比会有一个非常大的变化.

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

测试方法

以前所有版本的JUNIT都使用命名机制和反射来定位测试,下面的代码测试1+1= 2:

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中,测试方法由@Test 标记说明,如下:

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"开头的方法,下面的方法也同样可以工作:

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);
  }

}

下面的代码也同样正确:

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);
  }

}

这种命名机制最大的优点是更适合你的待测试类或方法名称,例如,你可以使用ListTEst.contains()测试 List.contains();使用ListTest.addAll()测试 List.add()等等.

TestCase还可以继续使用,但你没有必须再扩展为子类,只要你声明了@Test,你可以将测试方法放在任何类中,当然如要访问assert等方法,你必须要引用junit.Assert类,如下:

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)使得跟以前版本一样简单:

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);
  }

}

这种方法测试受保护的方法非常容易,因为你可以在测试类中继承有受保护方法的类.



Back to top


SetUp 和TearDown

JUnit 3 中test runners 会在每个测试之前自动调用 setUp()方法。此方法主要用于初始化变量,打开日志,重置环境变量等。下面是XOM's XSLTransformTest中的 setUp()方法:

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中,你仍然可以在每个测试前初始化变量和配置环境,,然而,这些操作可以不用在Setup()中完成,你可以在初始化方法前面添加@Beforer 来表示,如下:

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

你也可以有多个方法标记有@Before,所有方法都会在每个测试之前执行:

@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()方法,下面的代码是结束测试时回收内存:

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

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

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

@Before一样,你也可以有多个标记有 @After的清除方法,每个都会在执行完每个测试后执行。

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

测试集范围的初始化

JUnit 4中引入了一项JUNIT3没有的新特性,类级别的setUp()和tearDown(),即在一个类的所有测试前执行初始化,并在所有测试完成后执行清除。

例如,一个测试类中的每个测试都要用到一个数据库连接或网络连接,或其它很耗资源初始化或释放的资源,用不着在每个测试方法前后进行操作,而只需要在测试类开始前后执行即可。下面的示例是使用第三方的库进行错误,在执行所有测试前将错误先重定向到非标准输出,然后在所有测试结束后再输出到需要的地方,这样就不会影响到测试过程中产生的其它信息。

// 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);
}

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



Back to top


异常测试

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

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

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

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

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

Back to top


需要忽略的测试

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

// 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不会执行这些测试,但会说明这些测试被跳过了。在命令行测试界面中,字母“I”会表示测试跳过,或“E”表示测试失败,而不是用点”."表示成功.

$ java -classpath .:junit.jar org.junit.runner.JUnitCore nu.xom.tests.XIncludeTest
JUnit version 4.0rc1
.....I..
Time: 1.149

OK (7 tests)

要注意的是,假设这些测试由于某种理由放在最开始,如果你以后一直忽略这些测试,那些需要被测试的代码可能有问题而不会被检测到。因此忽略测试只是一个临时解决方法,并不是一个解决任何问题的真正办法。



Back to top


时间测试

性能测试是单元测试中最头疼的问题,JUnit 4也未完全解决此问题, 你可以在JUNIT4的测试方法中添加一个时间参数。如果测试时间超过参数,则测试失败。如下,如果测试时间超过0.5秒,则此测试失败:


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

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


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



Back to top


新的断言

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


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

这两个方法采用最直接方法比较,如果数组长度相同,且每个对应的元素相同,则比较成功,否则不成功.参数为空的情况也作了考虑.

Back to top


需要补充的地方

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

  • 最大的特点就是没有GUI测试界面,当测试正确时是绿色条,而出错时红色的,你也可以在Eclipse中集成JUNIT使用,但JUNIT4既没有AWT也没有SWING的GUI测试界面;
  • 另一个让人吃惊的是失败(期望错误)和错误(未预计的异常错误)没有明显区别,在JUNIT3中开发人员可以区分这两种情况,而在JUNIT4中不行;
  • 最后一个特点是JUNIT中没有用于建立一堆测试类的suite()方法,取而代之的是,采用变长参数传递未知数量的测试给test runner。

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



Back to top


编译和运行JUnit 4

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

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


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

Time: 0.003

OK (0 tests)

兼容性

Beck 和Gamma在努力保持后向和前向兼容性。JUnit 4可以直接运行根据JUNIT3编写的测试类,而不用任何修改,直接将各测试类的全名传递给test runner即可.test runner会根据不同的测试类调用不同的测试框架版本.

后向兼容性有点麻烦,即在JUNIT3中执行根据JUNIT4写的测试类,之所以要这样是因为在一个集成环境如Ecplise中,不需要升级到JUNIT4也可以测试JUNIT4的测试类,从而避免工具IDE的升级。为了让JUNIT4的测试类在JUNI3中能执行,你需要一个适配类JUnit4TestAdapter封装JUNIT3的测试类,如下代码:

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

而JAVA方面,JUNIT4一点兼容性都没有,因为完全依赖于JDK5的新特性,因此不可能在JAVA1.4上面执行JUNIT4。



Back to top


还有...

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



Back to top


资源


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

posted @ 2005-09-15 18:02 Java,研究之路 阅读(2058) | 评论 (4)编辑 收藏