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
http://randomcoder.com/articles/jsessionid-considered-harmful
最近总是打不开网页中的JAVA程序, 本来机器上有JAVA开发环境, 重装系统一般不安装JAVA,反正设置java_home和path中添加javac/java就可以了. 结果IE总是打不开,也不找到原因. 今天没办法了, 要参加一项考试,只好在网上搜索了一下, 原来出问题总是有原因的.
参考官方帮助:
http://www.java.com/zh_CN/download/help/win_offline.xml下载jre运行环境.安装.
- 双击该图标打开“Java 控制面板”
- 在“Java 控制面板”中选择“浏览器”选项卡
- 确保选中“Internet Explorer”、“Netscape”或“Mozilla”旁边的复选框
- 如果尚未选中,请选中对应的复选框,为您的 Web 浏览器启用 JRE
- 单击“应用”按钮
Internet Explorer 4.x 及更高版本
- 单击“工具”-->“Internet 选项”
- 选择“高级”选项卡,并向下滚动到“Java (Sun)”
- 选中“使用 Java 2 版本”旁边的复选框
- 接下来选择“安全”选项卡,然后选择“自定义级别”按钮
- 向下滚动到“Java 小程序脚本”
- 确保选中“启用”单选按钮。
- 单击“确定”保存您的首选设置。
最后不要忘了在这里测试一下是否安装成功: http://www.java.com/zh_CN/download/help/testvm.xml
久未在这里练笔了.今天突然想到为什么JAVA在国内始终对初学者而言不容易. 是因为网上的DEMO或示例感觉比.net的少,而且有示例也不是直接能在eclipse或jbuilder中打开的. 一般初学者估计IDE不是很熟悉,因此要把示例代码运行起来就不容易了, 更何况要分析别人的代码. 相比之下,.net的示例一般是整个工程,而且由于只有vs IDE,因此提供的示例一般是针对此平台的, 要学也就容易多了.
听说goolge要收购sun java了,如果真是这样, 应该是一件好事, 又多了一个强有力的竞争者, JAVA的前途就光明了.
一点个人浅见.
明天就是2005年最后一天了, 本想休一天假, 只是最近手头上的项目跟别的公司有关, 脱不了身, 烦燥呀, 准LP又在骂了, 要生存, 没办法。
去年底搞了个今年十大目标,看了一下,没几个完成了,估计只有30-40%完成了。
整天都在忙,不管是公司的事还是自己的研究,这一年就没有几天晚上是12点之前睡的,在上一个公司经常是晚上11点回去睡觉,现在这家公司是回去之后继续搞,所有的业余爱好都没有了,买了个DC,也没怎么用,什么都没有心情,事情总是在那里等着,视力又下降了,身体感觉不如从前了。记忆力也下降了,前一阵子的事都不记得了,只知道这两天做了些啥。
虽然又长了一岁,其它到是没什么长进:
- 五一节前终于换了家公司,计划之内的事,也算是完成了一项计划任务;
- 今年开始听《余世维》的讲座了,学以致用,没地方用,听了也没多少长进;
- 上周终于把两年前买的MP3搞懂如何快进了,便宜货就是不好用;
- MS出vs2k5,装上了,也感觉蛮好用,只是机器跑不动了;
- 开始使用Eclipse开发真正的JAVA项目,发现自己真的是很菜,眼高手低的毛病还是没改;
- 常年出差在外,跟准LP吵了无数次,已经是家常便饭了,计划明年结婚,还不知道是否会途中有变;
- 联系上以前的同学,可是要么不敢说话,要么就是没话说;
- 那个买的房子还有问题,不是我家里漏水,就是别人家漏水来淹我,唉,人倒霉了挡都挡不住;
- 周围的同学和以前的同事要么结婚,要么就是准备当爸妈了,想想自己还在外面打工,感觉自己真是没多少出息;
- 还有,想不起来了,。。。
每天都是新的一天,努力做好现在的事才是最重要的,把去年的计划拿来改改,争取在元旦这几天弄个2006年计划了,日子再艰难,也得过呀,毕竟这也是一种生活。
最近要在一个项目中使用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。与另一个人一起开发,大家的编程风格和代码不够规范,使用了一些重复的类和方法,这在后期维护是个工作,时间太紧,项目总是这样,就没得多少提高了;
个人水平实在有限,上面只是一面之词,项目月底才结束,有什么变更再补充。
不用说,这种事情一般人如果没有经历过,或旁边没有人经历过,要想搞得很清楚,一会儿就搞定是不可能的。
在N天前就到办证中心去拿了一张清单,上面有需要用到的证明文件。查看了一下家里的百宝箱,差不多都有。趁着8月份的五天请假,星期四的时候去办理。过程到不是很复杂,只拿了张一式两联的准迁证,当时根本就未在意准迁证上的内容,上面有个有效期的说法。这也只能怪自己粗心大意了。有效期是40天,到差不多过了一个月之后即9。10我还在出差,顺便让老婆看了一下,才发现是有有效期的,赶紧打电话问能否延长,这下麻烦了。17号在成都的时候,本想托人带回乐山给我老爸,可是我再仔细看了一下,发现必须在9.20之前回成都办理好,算了一下时间,已然来不及。19号,到办证中心希望能延长一下有效期,幸好,他们把有效期延长了一个月,赶快EMS给老爸,周三收到,周四到乐山办理销户并寄回成都,周六在成都收到。9。30,以请了一天假,到办证中心办理户口及身份证,按照要求需要提供:户口销户证明,准迁证第二联,身份证及照片两张。本以为办证中心旁边的照相中心说不能照非身份证照,惨,又赶快去找了一家普通相馆照相。交上各手续,终于拿到了成都市的户口薄,正准备办身份证,说是照相的联网有问题,不能照,旁边的一群人立刻炸开了锅,大骂政府办事有问题,甚至有人开始打电话投诉,没过多久,也不知道如何又搞好了,反正又排起长队开始照,我前面有20个人左右,差不多等了一个小时,造成老爸的生日午饭也没来得及赶回去吃。照完后又到柜台办理身份证,交上各手续和20元钱,说两个月之内可以拿到了。唉,真是好事多磨。不仅花了不少邮寄费,也花了不少时间和精力。政府为何就不改善一下局面,明知效率低,有问题,非得经过这些琐碎的步骤才行。对于没经历过的人而言,真的是要耽搁不少时间。
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);
}
}
|
这种方法测试受保护的方法非常容易,因为你可以在测试类中继承有受保护方法的类.
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。当优化测试性能,并且当你改进了配置和基准测试后而仍然很慢时,如数据库连接或网络问题,你才需要考虑使用这种方法。只有这样,你才能每天执行多次测试。
异常测试
异常测试是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才行
需要忽略的测试
也许你有些测试需要很长时间才能执行完成,并非是这个测试应该跑得快,而是它做的很复杂和很慢的工作造成的.如访问远程网络错误,需要很久才能有反馈.如果你不想让这种测试破坏你整个测试过程,你可能想跳过这个测试.当然也有可能某个测试超出控制范围而失败.如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)
|
要注意的是,假设这些测试由于某种理由放在最开始,如果你以后一直忽略这些测试,那些需要被测试的代码可能有问题而不会被检测到。因此忽略测试只是一个临时解决方法,并不是一个解决任何问题的真正办法。
时间测试
性能测试是单元测试中最头疼的问题,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");
}
|
新的断言
JUnit 4 增加了两上断文方法用于比较数组:
public static void assertEquals(Object[] expected, Object[] actual)
public static void assertEquals(String message, Object[] expected,
Object[] actual)
|
这两个方法采用最直接方法比较,如果数组长度相同,且每个对应的元素相同,则比较成功,否则不成功.参数为空的情况也作了考虑.
需要补充的地方
JUnit 4是一个非常基本的框架,还不是以前版本的升级。JUNIT3的开发人员会发现有些功能没有。
-
最大的特点就是没有GUI测试界面,当测试正确时是绿色条,而出错时红色的,你也可以在Eclipse中集成JUNIT使用,但JUNIT4既没有AWT也没有SWING的GUI测试界面;
-
另一个让人吃惊的是失败(期望错误)和错误(未预计的异常错误)没有明显区别,在JUNIT3中开发人员可以区分这两种情况,而在JUNIT4中不行;
-
最后一个特点是JUNIT中没有用于建立一堆测试类的
suite()方法,取而代之的是,采用变长参数传递未知数量的测试给test
runner。
没有GUI测试界面的确不方便,但其它改变简化了JUNIT的使用,从当前JUNIT的操作手册和FAQ的数量就知道,而JUNIT4的文档将不会需要这么多。
编译和运行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。
还有...
JUnit 4远未结束,还有许多需要补充,如文档,现在不推荐将以前的测试类升级到JUNIT4。当然JUNIT4的开发速度很快,其计划也很快会实现,JAVA1.4的开发人员仍然可以使用JUNIT3.8,而使用JAVA5的人员可以考虑是否采用JUNIT4了,因为在特性上更适合。
资源
-
Pragmatic
Unit Testing in Java with JUnit (Andy Hunt and Dave Thomas,
Pragmatic Programmers, 2003): An excellent introduction to unit testing.
-
JUnit
Recipes: Practical Methods for Programmer Testing (J. B.
Rainsberger, Manning, 2004): One of the most widely cited and referenced books
on JUnit.
-
TestNG: Cedric Beust's framework
pioneered the annotation based testing style now used in JUnit 4.
-
"TestNG makes
Java unit testing a breeze" (Filippo Diotalevi, developerWorks, January
2005): An introduction to TestNG.
-
"Incremental development
with Ant and JUnit" (Malcolm Davis, developerWorks, November 2000):
Explores the benefits of unit testing, in particular using Ant and JUnit, with
code samples.
-
"Demystifying
Extreme Programming: Test-driven programming" (Roy Miller,
developerWorks, April 2003): Find out how test-driven programming can
revolutionize your productivity and quality as a programmer, and learn the
mechanics of writing tests.
-
"Keeping
critters out of your code" (David Carew, et. al., developerWorks, June
2003): Learn how you can use JUnit in conjunction with WebSphere Application
Developer.
-
"Measure test
coverage with Cobertura" (Elliotte Rusty Harold, developerWorks, May
2005): Learn to identify untested code and locate bugs with this handy open
source tool.
下载测试版本
-
JUnit 4: Download the newest version of JUnit the SourceForge CVS
repository; be sure to use the branch tag "Version4."
|
1. 首先要安装jsse,需要jcert.jar,jnet.jar,jsse.jar三个jar;
2. 然后添加keystore:
%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.
参考
http://jakarta.apache.org/tomcat/tomcat-4.0-doc/ssl-howto.html.