junit学习之junit的基本介绍

Junit目前在一些大的公司或者相对规范的软件中使用的比较多,至关多的小公司并无把单元测试看的过重要。在大点的公司开发人员天天上班后,第一件事情就是从svn上把本身负责的代码checkout下来,而后运行单元测试,若是单元测试经过,那么说明本身的代码没有问题,而后就在代码块上修改与添加,完成后再用junit进行测试,测试完成后若是没有问题,那么就把相应的代码块提交给svn上。java

测试通常分为:单元测试、集成测试(主要看一块代码加进去后,系统会不会有问题)、验收测试和压力测试。eclipse

 

在之前的的项目中也用过Junit,当时的使用只是把Junit当成一个有多个main方法的一个函数。假如一个项目很是的大,测试的东西很是的多,若是不用Junit的话,那么这个工做量是很是大的。单元测试的最基本的一个功能是能进行自动化测试。单元测试都是经过断言的方式来肯定结果是否正确,即便用Assert。maven

 

一、从网站上下载junit的新版本,http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22junit%22%20AND%20a%3A%22junit%22 上下载相应的版本,这里下载的是junit4.10ide

二、在myeclipse中新建一个java项目,名称为junit01,并在新建一个文件夹,名称为lib,把上面下载的junit-4.10复制到里面,并build path,即添加到类路径中,以下图所示:
svn


 三、新建一个类Calcuate,其功能主要实现加减乘除,以下图所示,其所在的包为cn.whp.util

 函数

四、建立上面的类Calcuate中新建测试类,首先在myeclipse中建立一个source folder,将其命名成test,而后在其下建立一个与类Calcuate类在相同包的包,以下图所示:
性能

 


五、junit3与junit4的区别仍是比较明显的,在junit3中,若是某个类是测试类,必须将其继承类TestCase,若是某个方法是测试方法,必须让这个方法以testXX开头,若是但愿指定某个测试方法运行以前运行某个初始化方法,这个方法的名称必须是setUp,若是但愿在某个测试方法运行以后运行某个释放资源的方法,这个方法的名称必须是tearDown。单元测试

在junit4中,一个POJO类就是一个测试类,测试方法经过@Test来标识,初始化方法经过@Before来标识,释放资源的方法经过@After来标识,可是为了让junit4的测试类在junit3中也可使用,习惯于把初始化方法命名为setUp,释放资源的方法命名为tearDown。Test中的测试方法通常以Test来开始。其中标识为Before注解的方法,每次运行测试类,都会执行标识为@After与@Before的方法。以下图所示:
测试


六、在junit4中提供了一个Assert的类,这个类中有大量的静态方法进行断言的处理,在junit3中因为继承了TestCase,这个TestCase就能够直接assert,而junit4中须要先引入Assert类。以下图:

 在上图中使用了Assert类中的assertEquals方法,这方法的第一个参数意思是:若是方法cal.add(12,22)计算的结果不为34,那么就会打印出“加法有问题”的信息。第二个参数为方法cal.add(12,22)的执行结果,第三个参数是开发人员预计的函数cal.add(12,22)执行后的结果,这里预计12与22相加后其结果为34,若是在执行测试方法后,rel不等于34,那么就会报加法有问题。若是结果等于34,那么这个方法就测试经过。把上图中最后一个参数的值34改为35,那么执行junit测试后将会出现以下错误:

 若是想让上面的测试类能够在junit3中运行,能够把Assert类静态的导入,这样在调用每一个静态方法时,就不用都写上Assert类了,以下图所示:网站


 而后把全部别的测试方法补全,使用junit测试比使用main方法测试有很大的不一样的,每一个标识为@Test的方法都是一个可运行的方法,而且他们之间互不影响,例如testAddd方法出现问题了,并不影响testMinus方法的运行。这就是单元测试的好处,以下图: 

七、在测试除法cal.divide(3,0),若是除数为0,这个方法应该会抛出异常。如今的测试目标是,若是运行测试方法后,测试方法没有抛出异常,那么这个测试方法就不能经过。这时就须要用到junit的ArithmeticException。以下图所示:


 

这里若是把cal.divide(20,0)改为cal.divide(20,10),这样divide是没有问题的,可是这时测试类中的testDivideException方法执行junit测试后就不能经过了,由于这个测试方法已经断言所要测试的方法divide要抛出异常,结果没有抛出异常,因此junit测试是不能经过的。以下图所示:

 测试结果提示,应该抛出一个异常,结果没有抛出异常。

 

八、有时在测试时须要有这样的需求,就是对一个方法的时间进行测试,例如,要让一个方法,200毫秒里运行完,若是这个方法200毫秒不能运行完,那么这个方法就应该抛出异常,示例中将方法time中线程沉睡300毫秒,那么这个方法就不可能在200毫秒内完成,因此这个方法就会抛出异常。这就能够作一些方法性能上的测试,把Thread去掉,那么这个测试就可正常经过。以下图所示: 

 

 十、Junit的最基本的东西基本是这样的,断言、测试异常,捕获异常,测试方法的性能。例子代码在附件中。

相关文章
相关标签/搜索