Junit是用来做测试的,无论是单元测试,还是接口测试,都可以通过调用Junit来验证被调用方法的正确性。当然,要验证一个方法的正确性,还可以采用main方法,通过输出每一个result,人为比对其正确性,但是,它存在两个弊端,一是main方法不能一起运行,假如开发者写的程序有100个类,那么需要对应写100个main方法;二是大多数情况下需要人为的去观察输出结果是否正确,对于一个大的工程,这样做无疑是浪费时间。
一般eclipse里自带了Junit包,可以直接引入。如果不想用自带的Junit,可以在Junit的官网上下载,www.junit.org,然后再引入到项目中。Junit4里加入了静态引入的概念,它的好处是在调用该类的方法时,可以直接使用该方法,例如:import static org.junit.Assert.*,那么可以直接使用assertTrue(“must be true”, managerResult.isSuccess()),而不需要Assert.assertTrue(“must be true”, managerResult.isSuccess())。
asserThat,也是Junit4中引入的一个新方法,它可以替代所有的assert,使用方法为assertThat(actual,matcher<T>matcher), 其中,第二个参数可以是正则匹配值,它们更接近自然语言,可读性更高,更灵活。如果想在junit中使用这种方法,需要加载一个hamcrest的包,具体做法是:在项目里,添加外部的jar包,将hamcrest的hamcres-core-1.2.jar和hamcres-library-1.2.jar添加进来即可。这里再列举几个assertThat的一般匹配符的使用:
1,assertThat(z,allOf(greaterThan(5),lessThan(10))) /*z必须满足大于5并且小于10*/
2,assertThat(z,anyOf(greaterThan(5),lessThan(10))) /*z只需要大于5,或者小于10*/
3,assertThat(z,anything) /*z无论是什么都能通过测试*/
4,assertThat(z,not(8)) /*z的值不等于8*/
5,assertThat(z,is(8)) /*z的值等于8*/
此外,Junit4中采用java5中的注解annotation,其中,@test,@ingore,@before,@after,@beforeClass,@afterClass是常用到的几个注解,下面分别对它们做一个简单介绍:
1,@test,表示这是一个需要被执行的测试类;
2,@ingore被忽略的测试方法;
3,@before,@after,分别执行在每一个具体的@test前和后。在运行某些@test时,需要一些先决条件,如执行前需要先打开某个文件,就可以在@before中准备好;
4,@beforeClass,@afterClass,分别执行在所有的测试运行前和后,其中的方法必须是static,因为有可能在类初始化之前就运行了@beforeClass。有的测试类需要在测试前搭配环境,比如与数据库的连接,那么就可以放在@beforeClass中。简而言之,在测试前,需要搭载比较复杂的环境,加载比较费时的连接都可以放在@beforeClass中实现。
最后,运行Junit程序未通过的情况有两种,一是failure:指测试失败,比如实际值和预期结果不一致;二是error:指程序本身错误,比如溢出。然后通过查看Junit的具体错误信息,做相应的修改。
转载务必注明出处Taobao QA Team,原文地址:http://qa.taobao.com/?p=13758