JUnit使用简介

摘要:
JUnit单元简介是一个Java语言的单元测试框架。它是由KentBeck和Erich Gamma建立的,并逐渐成为KentBeck的sUnit中最成功的xUnit家族。JUnit有自己的JUnit扩展生态系统。大多数Java开发环境都集成了JUnit作为单元测试工具。Junit是一个继承TestCase类的框架,可用于自动测试。接下来,我们将介绍在eclipse下使用JUnit。

JUnit使用简介


      Unit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。
      JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。
      接下来介绍eclipse下JUnit的使用。因为目前新版本的JDK和eclipse都会自带JUnit4的包和JUnit测试的功能,所以并不需要去安装,当然如果版本比较老,没有JUnit功能,则需要另外安装,可以参见http://blog.csdn.net/oathevil/article/details/7524760.

一、首先创建一个待测试的项目

     待测项目calculate.java如下图所示: 

              JUnit使用简介第1张

     该项目是一个简易的计算功能,实现了两个整数的加减乘除功能。

二、建立JUnit项目

     按照以下图示的步骤创建JUnit Test Case:

              JUnit使用简介第2张

              JUnit使用简介第3张

     勾选上红框里的setUpBeforeClass()、tearDownAfterClass()、setUp()和tearDown(),会自动生成annotation及相应的方法,如图为点击“finish”之后生成的TestCalculate.jave。

               JUnit使用简介第4张

其中annotation,@BeforeClass、@AfterClass、@Before和@After的使用方法如下表所示,这四个annotation加上@Test是JUnit最常用的annotation:

@BeforeClass and @AfterClass@Before and @After
在一个类中只可以出现一次

在一个类中可以出现多次,即可以在多个方法的声明前加上这两个Annotaion标签,执行顺序不确定

方法名不做限制方法名不做限制
在类中只运行一次在每个测试方法之前或者之后都会运行一次

@BeforeClass父类中标识了该Annotation的方法将会先于当前类中标识了该Annotation的方法执行。
@AfterClass 父类中标识了该Annotation的方法将会在当前类中标识了该Annotation的方法之后执行

@Before父类中标识了该Annotation的方法将会先于当前类中标识了该Annotation的方法执行。
 @After父类中标识了该Annotation的方法将会在当前类中标识了该Annotation的方法之后执行
必须声明为public static必须声明为public 并且非static
所有标识为@AfterClass的方法都一定会被执行,即使在标识为@BeforeClass的方法抛出异常的的情况下也一样会。所有标识为@After 的方法都一定会被执行,即使在标识为 @Before 或者 @Test 的方法抛出异常的的情况下也一样会。

 JUnit中还有很多其他的annotation,关于这些annotation的说明和使用方法如下表:

JUnit4使用Java5中的注解(annotation),以下是JUnit4常用的几个annotation:
 @Before:初始化方法 对于每一个测试方法都要执行一次(注意与BeforeClass区别,后者是对于所有方法执行一次)
 @After:释放资源 对于每一个测试方法都要执行一次(注意与AfterClass区别,后者是对于所有方法执行一次)
 @Test:测试方法,在这里可以测试期望异常和超时时间
 @Test(expected=ArithmeticException.class)检查被测方法是否抛出ArithmeticException异常
 @Ignore:忽略的测试方法
 @BeforeClass:针对所有测试,只执行一次,且必须为static void
 @AfterClass:针对所有测试,只执行一次,且必须为static void
 一个JUnit4的单元测试用例执行顺序为:
 @BeforeClass -> @Before -> @Test -> @After -> @AfterClass;
 每一个测试方法的调用顺序为:
 @Before -> @Test -> @After; 
摘自其他博客。(由于找不到网址了,以后看到再补)

三、JUnit的使用

JUnit为我们提供了一些辅助函数,他们用来帮助我们确定被测试的方法是否按照预期的效果正常工作,通常,把这些辅助函数称为断言。

常用的Assert(断言):1、assertEquals(a, b) Asserts that two primitive values are equal.

                                    测试a是否等于b(a和b是原始类型数值(primitive value)或者必须为实现比较而具有equal方法)

                               2、assertFalse(a) Asserts that a condition (a) is false.

                                    测试a是否为false(假),a是一个Boolean数值。

                               3、assertTrue(a) Asserts that a condition is true.

                                    测试a是否为true(真),a是一个Boolean数值

                               4、assertNotNull(a) Asserts that an object isn't null.

                                    测试a是否非空,a是一个对象或者null。

                               5、assertNull(a) Asserts that an object is null.

                                    测试a是否为null,a是一个对象或者null。

                               6、assertNotSame(a, b) Asserts that two objects do not refer to the same object.

                                    测试a和b是否没有都引用同一个对象。

                               7、assertSame(a, b) Asserts that two objects refer to the same object.

                                    测试a和b是否都引用同一个对象。

如下图是使用断言并且运行测试的截图:

               JUnit使用简介第5张

如图,代码中红框就是使用了断言,检测两个数相加的结果与7比较(这里需要注意下,之前待测程序使用了两个浮点数,然而rassertEquals(double,double)方法已过时,测试出现问题,故将程序改为了两个整数的加减乘除)。结果图片左边的框报告出测试未通过,到此为止测试结束。

测试程序中可以有多个@Test,在JUnit4.11后可以使用 @FixMethodOrder 注解改变每个测试的顺序。

目前当程序中有多个@before和@after注解还没有弄明白,如有大神了解,请指导。

有了JUnit,单元测试和回归测试变得好容易,所以经常使用JUnit对于中大型项目来说,有很大的益处

2015-05-25 22:34:18

---------------------------------------------------

人生并不像火车要通过每个站似的经过每一个生活阶段。

     人生总是直向前行走,从不留下什么。 

                                                    —— 刘易斯

免责声明:文章转载自《JUnit使用简介》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇nginx创建本地服务器和配置代理(解决跨域)Gi命令行操作下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ES检索分组统计异常: ElasticsearchStatusException [Elasticsearch exception [type=illegal_argument_exception

异常名称:ElasticsearchStatusException&illegal_argument_exception 异常分析:按照brand字段进行分组时出现此异常,brand字段mapping出现问题? 异常原因:brand字段初始化时 type 默认为keyword 从而进行了分词,导致在brand字段上做分组时找不到此字段 异常详情:...

基础概念总结(spring security、Quartz、JUnit测试)

1、Spring Security 的大体框架和原理 (1)在web.xml中配置过滤器,这样就可以控制这个项目的每个请求。 (2)在applicationContext.xml配置,其中http标签配置如何截用户请求,和配置用户认证(固定用户、使用数据库管理用户)。 (3)过滤器最上层为HttpSessionContextIntegrationFilt...

Error invoking SqlProvider method (com.github.abel533.mapper.MapperProvider.dynamicSQL). Cause: java.lang.InstantiationException: com.github.abel533.mapper.MapperProvider

org.apache.ibatis.exceptions.PersistenceException: ### Error querying database.  Cause: org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (com.github.a...

Mockito (一)

Mocktio 入门 Mockito 是一个模拟测试框架。主要功能是模拟类/对象的行为。 Mockito 一般用于控制调用外部的返回值,让我们只关心和测试自己的业务逻辑。 我们看一个示例: package demo; import java.util.Random; public class HttpService { public int...

JUnit4总结

JUnit4使用要求: 测试方法必须使用@Test进行修饰 测试方法必须使用public void 进行修饰,不能带任何的参数 新建一个源代码目录来存放我们的测试代码 测试类的包应该和被测试类保持一致 测试单元中的每个方法必须可以独立测试,测试方法不能有任何的依赖 测试类使用Test作为类名的后缀 测试方法使用test作为方法名的前缀 注意:3,6,7...

12个提高Java程序员工作效率的工具

  Java开发者常常都会想办法如何更快地编写Java代码,让开发过程变得更加轻松,更加高效。目前,市面上涌现出越来越多的高效编程工具。团长总结了几个常用的工具,其中包含了大多数开发人员已经使用、正在使用或将来一定会用到的高效工具。      1、Eclipse   Eclipse是最有名也最广泛使用的Java集成开发环境(IDE),允许开发者结合语言支持...