随笔 - 115  文章 - 481  trackbacks - 0
<2006年11月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

常用链接

留言簿(19)

随笔档案(115)

文章档案(4)

新闻档案(1)

成员连接

搜索

  •  

最新评论

阅读排行榜

评论排行榜

这篇文章算是一个翻译了。分成两部分,集合了两篇 JUnit.org 上的推荐文章,这里是原文的地址:

http://www.instrumentalservices.com/index.php?option=com_content&task=view&id=45&Itemid=52

http://www.devx.com/Java/Article/31983

 

JUnit 我就不多做介绍了, Kent Beck Erich Gamma 的作品。这里主要讲一下在 JUnit 4.0 4.1 版本中的一些改进和新的用法。

要很好的使用 JUnit 4.x ,必须要 Java SE 5.0 ,因为这个版本最大的变化就是加入了大量的 Annotation 的使用。

来通过一个例子看下,首先是一个老版本的测试案例:

有几点需要关注:

1 —— 一个测试案例必须要继承自 TestCase

2 —— JUnit 是通过反射机制来执行每一个 test 方法,它通过匹配方法名 testXXX 来确定一个方法为需要执行的测试 Case

3 —— 使用一个或几个 assertXXX 方法来验证我们的情况。

 

好,现在使用 JUnit 4.x 来实现相同的测试,从中,我们就能看到一些新的东西:

首先关注以下几点:

1 ——我们的测试类并没有 extends TestCase 类了,

2 ——我们的测试方法并没有以 test 开头,而是使用了 @Test 标签来标记该方法是一个需要测试的方法。

 

下面的图标示了用 JUnit 4.x 我们需要做的事情:

1 ——我们需要引进 org.junit.Test 标签,还有很多标签都在 org.junit.* 包里面。

2 ——引进 static assertEquals 静态方法,引入静态方法也是 Java 5 的一个新的特性,避免了使用过长的应用方法名。

3 ——引进 JUnit4TestAdapter ,这是一个和老版本 JUnit 工具合用的适配器。

4 ——使用 @Test 标签来申明一个方法需要测试。

5 ——直接使用需要的 assert 方法

6 ——使用一个 main 方法来用 JUnit4TestAdapter 在老的 Junit runner 上运行新的测试。

 

总结一下:

l         使用一个普通的类,而不必继承自 Junit.framework.TestCase

l         使用 @Test 标签来标记一个方法是一个测试方法。

l         使用一个 assert 方法。在新版本的 Junit 中, assert 方法和老方法没有什么区别。并且使用静态方法引入,( static import )特性来简化方法的使用。

l         使用 JUnit4TestAdapter 来运行测试。

 

Set up tear down

新版本的 JUnit 提供了两个新的标签来使用 set up tear down

@Before :使用了该标记的方法在每个测试方法执行之前都要执行一次。

@After :使用了该标记的方法在每个测试方法执行之后要执行一次。

 

这里有个测试的例子:

如果我们在所有的方法中都添加一个 System.out.println() 方法,执行的结果会像这样:

       runOnceBeforeAllTests() 被调用;

bookNotAvailableInLibrary() 被调用;

bookAvailableInCentralLibrary ()被调用;

runAfterAllTests ()被调用,

而如果我们还有一个 @Before beforeTest() 方法和一个 @After afterTest() 方法,那么执行的结果会是这样:

       runOnceBeforeAllTests() 被调用;

       beforeTest() 被调用;

bookNotAvailableInLibrary() 被调用;

afterTest ()被调用;

beforeTest() 被调用;

bookAvailableInCentralLibrary ()被调用;

afterTest ()被调用;

runAfterAllTests ()被调用,

从这里我们就可以看出两者的区别了。

另外一点, @Before @After 标示的方法只能各有一个。

 

错误处理:

JUnit4.0 之前,对错误的测试,我们只能通过 fail 来产生一个错误,并在 try 块里面 assertTrue true )来测试。现在,通过 @Test 标签中的 expected 属性,就可以更优雅的测试错误了:

在这段代码中,我们为 @Test 标签添加了 expected 属性,并提供了一个 BookNotAvailableException ,那么在这段测试中,如果代码没有抛出这个类型的错误,测试就失败了,如果正确抛出该类型错误,测试通过。

 

其他的标签:

@ignore 标签:

该标签标记的测试方法在测试中会被忽略。当测试的方法还没有实现,或者测试的方法已经过时,或者在某种条件下才能测试该方法(比如需要一个数据库联接,而在本地测试的时候,数据库并没有连接),那么使用该标签来标示这个方法。同时,你可以为该标签传递一个 String 的参数,来表明为什么会忽略这个测试方法。比如: @lgnore(“ 该方法还没有实现 ”) ,在执行的时候,仅会报告该方法没有实现,而不会运行测试方法。

 

@Test(timeout=xxx):

该标签传入了一个时间(毫秒)给测试方法,

如果测试方法在制定的时间之内没有运行完,则测试也失败。

 

这篇文章就到这里,其实 JUnit4.x 里面还有很多标签的用法,将在明天的 blog 中继续。

 (注:本文作者,EasyJF开源团队 stef_wu,转载请保留作者声明!)

posted on 2006-11-19 19:27 简易java框架 阅读(2483) 评论(1)  编辑  收藏

FeedBack:
# re: 10分钟了解junit 4 2006-11-20 11:46 一滴水
和.net 的 NUnit 靠拢了 哈哈,基本思想一样  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: