“JUnit4.0 in 10 minutes” learning minutes
来源:百度文库 编辑:神马文学网 时间:2024/07/08 21:46:03
“JUnit4.0 in 10 minutes” learning minutes
TestNG与JUnit的嘴仗似乎告一段落了,Gunjan Doshi今天发布了一个"JUnit 4.0 in 10 Minutes: A Quick Reference Guide",学习笔记如下。
注:所有代码和插图都来自于原文。
首先来看看JUnit4.0以前,我们怎样编写测试用例:
![](http://image.360doc.cn/DownloadImg/18042/591317_1.jpg)
测试用例必须继承自"junit.framework.TestCase"; 测试用例函数必须以"test"开头; 用assert的系列函数来验证结果。
如果用JUnit4.0重写,将是这个样子:
![](http://image.360doc.cn/DownloadImg/18042/591317_2.jpg)
不用再继承自"junit.framework.TestCase",TestNG批评JUnit的一个方面就是在JUnit中,每一个测试用例都会实例化一份TestCase,带来效率的降低。JUnit4.0确实修改了这样的设计。 测试函数名称不用再以"test"开头,而用Annotation"@Test"来修饰; assert系列函数没有大的改变; 如果希望用老的JUnit Runner来运行JUnit4.0的测试用例,需要用Junit4TestAdapter来Adapt一下。 或者可以用新的JUnit4的Runner来运行。
java org.junit.runner.JUnitCore LibraryTest
其中,用"@Test" Annotation来修饰测试用例是JUnit4.0的一个大Feature,这也正是这种Metadata应该发挥作用的地方。
"@Test"有两个非常有用的参数:
1) 预期会抛出的异常检测
"@Test"的"expected"参数用来说明希望抛出的异常,如果运行时没有抛出这个异常,测试用例就被标识为失败。
2) 预期运行时间![](http://image.360doc.cn/DownloadImg/18042/591317_3.jpg)
"@Test"有一个timeout的参数用来说明这个测试用例运行的时间最长应该为多少,如果时间超出,则标识为失败。
@Test (timeout=10)
TestNG批评JUnit的另一个方面是所有的测试用例函数都会在测试执行前执行setUp,在测试后执行tearDown,不仅效率很低,也会带来很多问题(比如一次性的数据库链接等等)。
JUnit4.0这样解决这个问题:
引入Annotation"Before", "After", "BeforeClass", "AfterClass"。
"Before"修饰的函数将会在每个测试运行前运行,"After"修饰的函数将在每个测试用例运行后运行。JUnit4.0支持任意数量的"Before"和"After" Annotation,并且支持继承。"Before"修饰函数的执行顺序为父类的在前,继承类在后,"After"则相反,继承类在前,父类在后。
![](http://image.360doc.cn/DownloadImg/18042/591317_4.jpg)
"BeforeClass"修饰的函数将会在所有的测试用例运行前运行一次(只运行一次), "AfterClass"则会在所有的测试用例运行后运行一次(只运行一次)。
![](http://image.360doc.cn/DownloadImg/18042/591317_5.jpg)
JUnit4.0还有一个有用的Annotation "@Ignore",它用来修饰将被忽略的函数,用"@Ignore"修饰的测试用例函数将不会执行。这个Annotation支持一个字符串参数,用来说明忽略的原因,比如:
@Ignore(“Database is down”)
TestNG则采用配置文件的办法解决这个问题,两种方法各有利弊。
Reference:
JUnit 4.0 in 10 Minutes: A Quick Reference Guide [PDF] - Gunjan Doshi
注:所有代码和插图都来自于原文。
Popularity: 24%
Related entries:
TDD, JUnit, TestNGTag your Java source code with Tiger‘s annotationGet the Stack trace information in Java SE 5.0 各种编程语言的对比CPPUnit Lite
Posted in \" href="http://www.mengyan.org/blog/archives/category/%e6%8a%80%e6%9c%af/" rel="category tag">技术 at July 28th, 2005 |1 Comment »
TDD, JUnit, TestNG
July 9, 2005
前两天注意到TheServerSide上一个挺老的新闻,TestNG阵营认为JUnit在最新的4.0版本中“抄袭”了他们的Idea,TestNG的Co-Founder分别在自己的Blog上发言来证明(Cedric Beust:JUnit 4 overview,Alexandru Popescu:JUnit 4.0),Erich Gamma则留言反击,听起来满有意思,于是我也顺便研究了一下TestNG。
"…I’m not quite sure what is the driving vision behind JUnit 4 (besides TestNG
)".
I’m glad that there is TestNG, but there are also other interesting testing framework efforts. In particular there is NUnit.NUnit has introduced using annotations in testing frameworks a while ago. Most of the requests for annotation based tests came from the dual NUnit/JUnit users. So we are listening to the community.
Posted by: Erich Gamma at June 11, 2005 09:02 AM
先来说说TDD(Test Driven Development)- 测试驱动开发,想了解TDD,最好看看Kent Back的《测试驱动开发》,里面详细的讲述了TDD的原理、实践。不过,我觉得,只有你真正的去用了,才能体会到测试驱动开发给你带来的好处。
我觉得,TDD给我们带来的好处有很多:
1)从功能需求入手,设计对象,在写TestCase的时候其实就是对象设计的时候,这样,TestCase写好写全了,对象也就设计好了;
2)可以在开发阶段找到很多Bug(尤其是很多边缘测试的情况),减少后期Debug的时间;
3)减少由于重构或者Fix其它Bug的时候带来的Regression。
全部测试通过,开发也就结束了,真的很有帮助。
举个例子,比如Xerdoc DSearch中JPEG Parser Plugin的开发。首先从功能需求的角度出发,这个Parser要负责解析出JPEG文件的EXIF头信息,那么ok,我就设计一个ExifInfo的解析Parser类。然后开始写TestCase。
public void testParseExifInfor() { String filePath = "P8040002.JPG"; File picFile = new File(filePath); ExifInfor exif = new ExifInfor(filePath); assertTrue(exif != null); assertEquals(600, exif.getWidth()); assertEquals(true, exif.isColor()); ... ... }
在进行测试用例(TestCase)设计的时候,我们就可以设计出ExifInfor类的基本接口,剩余的工作可以留到重构(Refactoring:是XP Programming中另一个非常棒的概念。)的时候进行了。
当然,测试用例要Cover尽可能多的情况,比如不标准的Exif信息等等,当开发结束,所有的测试都通过的时候,你就可以冲上一杯咖啡,来想想重构的事儿了(当然,重构完毕还是需要用TestCase来检验重构的结果的,呵呵)。
TestNG(Test Next Generation - The next generation of unit testing),顾名思义,目标直指下一代的测试框架。
TestNG比起JUnit来说,变化主要表现在:
1)最大的不同就是TestNG利用了JavaSE 5.0中的Annotations(JSR175)来代替test开头的用例函数名(TestNG说,现有IDE大多都按照函数名排序了,test打头弄得这些函数不好分辨,呵呵)。我觉得这个Idea确实不错,而且本应如此,Annotation就是用来干这个的嘛。不过这个其实不能怪JUnit,JUnit出来的时候Annotations还没有出现在Java语言中。
2)解决JUnit中的多实例化问题。在JUnit中,每一个测试用例都会实例化一份TestCase,同时也会在测试执行前执行setUp,在测试后执行tearDown。这会带来效率的降低,而有些测试,比如数据库链接,也会带来一些其它问题。TestNG用XML配置文件来解决这样的问题。不过,我觉得,简单才是最美,弄成Ant配置那么复杂的话,真够麻烦。
3)TestNG对多线程测试的支持良好,只需要配置即可。JUnit中要想进行多线程测试比较麻烦,需要其它模块,比较著名的是GroboUtils。
我觉得很多概念都不错,比如Group Testing,不需要派生TestCase等等,测试用例函数的参数化等等,不过这些还是站在了巨人(JUnit)的肩膀上。我不喜欢的是XML Configuration的部署策略,太麻烦。TestNG给出的是这样的应用场景,一个小组开发,写好所有的测试用例,有的人只需要这几个,有的人需要那几个,因为全部编译测试非常花费时间,这样,更改XML Configuration就可以了,确实如此,不过我实在不喜欢什么东西都用这种配置文件来弄,简单的事情变得复杂,就不好玩儿了。就连Ant之父James Duncan Davidson也觉得Ant现在的脚本太复杂呢,呵呵。
从0到1和从1到2是完全不同的,基于测试开发这个Idea真的是非常棒,这种Test Driven Development真的极大的改变了软件开发的方式。最早的Idea不知道是谁的,我记着从前看Bruce Eckel的Thinking in Java的时候,就有单元测试的影子。插一句,其实,Java中的Assert Keyword,MFC中的Assert宏,也都有TDD的影子,不过还差很多,但是开发理念已经有几分相像了。
TestNG与JUnit的嘴仗似乎告一段落了,Gunjan Doshi今天发布了一个"JUnit 4.0 in 10 Minutes: A Quick Reference Guide",学习笔记如下。
注:所有代码和插图都来自于原文。
首先来看看JUnit4.0以前,我们怎样编写测试用例:
![](http://image.360doc.cn/DownloadImg/18042/591317_1.jpg)
测试用例必须继承自"junit.framework.TestCase"; 测试用例函数必须以"test"开头; 用assert的系列函数来验证结果。
如果用JUnit4.0重写,将是这个样子:
![](http://image.360doc.cn/DownloadImg/18042/591317_2.jpg)
不用再继承自"junit.framework.TestCase",TestNG批评JUnit的一个方面就是在JUnit中,每一个测试用例都会实例化一份TestCase,带来效率的降低。JUnit4.0确实修改了这样的设计。 测试函数名称不用再以"test"开头,而用Annotation"@Test"来修饰; assert系列函数没有大的改变; 如果希望用老的JUnit Runner来运行JUnit4.0的测试用例,需要用Junit4TestAdapter来Adapt一下。 或者可以用新的JUnit4的Runner来运行。
java org.junit.runner.JUnitCore LibraryTest
其中,用"@Test" Annotation来修饰测试用例是JUnit4.0的一个大Feature,这也正是这种Metadata应该发挥作用的地方。
"@Test"有两个非常有用的参数:
1) 预期会抛出的异常检测
"@Test"的"expected"参数用来说明希望抛出的异常,如果运行时没有抛出这个异常,测试用例就被标识为失败。
2) 预期运行时间
![](http://image.360doc.cn/DownloadImg/18042/591317_3.jpg)
"@Test"有一个timeout的参数用来说明这个测试用例运行的时间最长应该为多少,如果时间超出,则标识为失败。
@Test (timeout=10)
TestNG批评JUnit的另一个方面是所有的测试用例函数都会在测试执行前执行setUp,在测试后执行tearDown,不仅效率很低,也会带来很多问题(比如一次性的数据库链接等等)。
JUnit4.0这样解决这个问题:
引入Annotation"Before", "After", "BeforeClass", "AfterClass"。
"Before"修饰的函数将会在每个测试运行前运行,"After"修饰的函数将在每个测试用例运行后运行。JUnit4.0支持任意数量的"Before"和"After" Annotation,并且支持继承。"Before"修饰函数的执行顺序为父类的在前,继承类在后,"After"则相反,继承类在前,父类在后。
![](http://image.360doc.cn/DownloadImg/18042/591317_4.jpg)
"BeforeClass"修饰的函数将会在所有的测试用例运行前运行一次(只运行一次), "AfterClass"则会在所有的测试用例运行后运行一次(只运行一次)。
![](http://image.360doc.cn/DownloadImg/18042/591317_5.jpg)
JUnit4.0还有一个有用的Annotation "@Ignore",它用来修饰将被忽略的函数,用"@Ignore"修饰的测试用例函数将不会执行。这个Annotation支持一个字符串参数,用来说明忽略的原因,比如:
@Ignore(“Database is down”)
TestNG则采用配置文件的办法解决这个问题,两种方法各有利弊。
Reference:
JUnit 4.0 in 10 Minutes: A Quick Reference Guide [PDF] - Gunjan Doshi
注:所有代码和插图都来自于原文。
Popularity: 24%
Related entries:
TDD, JUnit, TestNGTag your Java source code with Tiger‘s annotationGet the Stack trace information in Java SE 5.0 各种编程语言的对比CPPUnit Lite
Posted in \" href="http://www.mengyan.org/blog/archives/category/%e6%8a%80%e6%9c%af/" rel="category tag">技术 at July 28th, 2005 |1 Comment »
TDD, JUnit, TestNG
July 9, 2005
前两天注意到TheServerSide上一个挺老的新闻,TestNG阵营认为JUnit在最新的4.0版本中“抄袭”了他们的Idea,TestNG的Co-Founder分别在自己的Blog上发言来证明(Cedric Beust:JUnit 4 overview,Alexandru Popescu:JUnit 4.0),Erich Gamma则留言反击,听起来满有意思,于是我也顺便研究了一下TestNG。
"…I’m not quite sure what is the driving vision behind JUnit 4 (besides TestNG
![](http://image.360doc.cn/DownloadImg/18042/591317_6.gif)
I’m glad that there is TestNG, but there are also other interesting testing framework efforts. In particular there is NUnit.NUnit has introduced using annotations in testing frameworks a while ago. Most of the requests for annotation based tests came from the dual NUnit/JUnit users. So we are listening to the community.
Posted by: Erich Gamma at June 11, 2005 09:02 AM
先来说说TDD(Test Driven Development)- 测试驱动开发,想了解TDD,最好看看Kent Back的《测试驱动开发》,里面详细的讲述了TDD的原理、实践。不过,我觉得,只有你真正的去用了,才能体会到测试驱动开发给你带来的好处。
我觉得,TDD给我们带来的好处有很多:
1)从功能需求入手,设计对象,在写TestCase的时候其实就是对象设计的时候,这样,TestCase写好写全了,对象也就设计好了;
2)可以在开发阶段找到很多Bug(尤其是很多边缘测试的情况),减少后期Debug的时间;
3)减少由于重构或者Fix其它Bug的时候带来的Regression。
全部测试通过,开发也就结束了,真的很有帮助。
举个例子,比如Xerdoc DSearch中JPEG Parser Plugin的开发。首先从功能需求的角度出发,这个Parser要负责解析出JPEG文件的EXIF头信息,那么ok,我就设计一个ExifInfo的解析Parser类。然后开始写TestCase。
public void testParseExifInfor() { String filePath = "P8040002.JPG"; File picFile = new File(filePath); ExifInfor exif = new ExifInfor(filePath); assertTrue(exif != null); assertEquals(600, exif.getWidth()); assertEquals(true, exif.isColor()); ... ... }
在进行测试用例(TestCase)设计的时候,我们就可以设计出ExifInfor类的基本接口,剩余的工作可以留到重构(Refactoring:是XP Programming中另一个非常棒的概念。)的时候进行了。
当然,测试用例要Cover尽可能多的情况,比如不标准的Exif信息等等,当开发结束,所有的测试都通过的时候,你就可以冲上一杯咖啡,来想想重构的事儿了(当然,重构完毕还是需要用TestCase来检验重构的结果的,呵呵)。
TestNG(Test Next Generation - The next generation of unit testing),顾名思义,目标直指下一代的测试框架。
TestNG比起JUnit来说,变化主要表现在:
1)最大的不同就是TestNG利用了JavaSE 5.0中的Annotations(JSR175)来代替test开头的用例函数名(TestNG说,现有IDE大多都按照函数名排序了,test打头弄得这些函数不好分辨,呵呵)。我觉得这个Idea确实不错,而且本应如此,Annotation就是用来干这个的嘛。不过这个其实不能怪JUnit,JUnit出来的时候Annotations还没有出现在Java语言中。
2)解决JUnit中的多实例化问题。在JUnit中,每一个测试用例都会实例化一份TestCase,同时也会在测试执行前执行setUp,在测试后执行tearDown。这会带来效率的降低,而有些测试,比如数据库链接,也会带来一些其它问题。TestNG用XML配置文件来解决这样的问题。不过,我觉得,简单才是最美,弄成Ant配置那么复杂的话,真够麻烦。
3)TestNG对多线程测试的支持良好,只需要配置即可。JUnit中要想进行多线程测试比较麻烦,需要其它模块,比较著名的是GroboUtils。
我觉得很多概念都不错,比如Group Testing,不需要派生TestCase等等,测试用例函数的参数化等等,不过这些还是站在了巨人(JUnit)的肩膀上。我不喜欢的是XML Configuration的部署策略,太麻烦。TestNG给出的是这样的应用场景,一个小组开发,写好所有的测试用例,有的人只需要这几个,有的人需要那几个,因为全部编译测试非常花费时间,这样,更改XML Configuration就可以了,确实如此,不过我实在不喜欢什么东西都用这种配置文件来弄,简单的事情变得复杂,就不好玩儿了。就连Ant之父James Duncan Davidson也觉得Ant现在的脚本太复杂呢,呵呵。
从0到1和从1到2是完全不同的,基于测试开发这个Idea真的是非常棒,这种Test Driven Development真的极大的改变了软件开发的方式。最早的Idea不知道是谁的,我记着从前看Bruce Eckel的Thinking in Java的时候,就有单元测试的影子。插一句,其实,Java中的Assert Keyword,MFC中的Assert宏,也都有TDD的影子,不过还差很多,但是开发理念已经有几分相像了。
“JUnit4.0 in 10 minutes” learning minutes
Learn Eclipse GMF in 15 minutes
Learn Eclipse GMF in 15 minutes
Minutes at a Meeting
Turn Your Dream Into Reality in 5 Minutes a Day:Tips for Time-Stressed Dreamers
Taking Minutes at a Meeting
以少制胜 Less as a competitive advantage: My 10 minutes at Web 2.0
Issues in Distance Learning
RESEARCH IN ONLINE LEARNING COMMUNITY
RESEARCH IN ONLINE LEARNING COMMUNITY
24.Learning English in England
The value of multimedia in learning
Social Networking: Learning Theory in Action
The value of multimedia in learning
Barriers to Learning in Distance Education
Teaching and Learning in changing times
1. I'm not myself 我烦透了 2、Don't bother me! 别烦我! 3、Give me five more minutes please。 再给我五分钟时间好吗? 4、How
STUDY OF STUDENTS‘SENSE OF LEARNING COMMUNITY IN ONLINE ENVIRONMENTS
Why e-Teaching is knocking down e-learning in Nigeria
Ten Learning Technologies to Transform Training in 2008 | Gary Woodill
Adaptive Learning Systems in the World Wide Web
10 English learning website
Email as a learning technology in the South Pacific: An evaluation
Intelligent Tutoring Tools for Cognitive Skill Acquisition in Life Long Learning