概述:Junit是一个可编写重复测试(即所谓白盒测试)的简单框架,它包括了以下特性:

          1 对预期结果作断言
          2 提供测试装备的生成与销毁
          3 易于组织执行测试
          4 图形与文字界面的测试器

 

环境配置:Eclipse 中配置junit,在Package Explorer中选择项目测试工程 -> 右击鼠标 -> 选择properties -> 在左边菜单中选择Java Build Path  -> 在右边选择标签             Libraries  -> 单击按钮“Add Library”  -> 选择JUnit , 单击按钮 “Next>”  -> 选择JUnit library version 为: JUnit4 -> 单击按钮“Finish” –> 单击按钮 “OK”

 

 

 

 

简单实例分析:

package test;

 

public class Hello {

    public String hello(){

        return "hello";

    }

}

 

package test;

import static org.junit.Assert.*;

import org.junit.*;

import test.Hello;

 

public class HelloTest{

 

Hello hello = new Hello();

   

@Before

public void setUp()throws Exception{

    }

 

@After

public void tearDown()throws Exception{

}

 

      @Test

public void helloTest(){

          assertEquals(hello.hello(),"hey");

      }

}

      这是一个最基础的JUnit4测试实例,功能为通过HelloTest类测试Hello类。其中HelloTest类由三个带注解的方法组成,其中@Before代表了该方法为初始化方法,

      任何一个测试执行前都需执行该代码,@After代表了释放资源,在每个测试方法执行后都需执行该代码,@Test代表了测试方法,在JUnit中会自动执行,包含了测试内容。

      @Test方法中的assertEqual为JUnit自带的断言方法,用来判断实际输出是否符合期望。此处assertEqual功能为判断两个对象是否相等,若不相等则抛出异常。

 

 

运行结果:通过。

若改动helloTest方法为assertEquals(hello.hello(),”hey”),则结果为

不通过

创建一个测试实例:

一.      包含必要的package

       JUnit4最重要的一个package是org.junit.*,这个包包含了绝大部分功能另外org.junit.Assert.*则包含了各种断言方法

二.      声明用于测试的方法

       测试类中,必须使用JUnit自定义的“注解”来明确表明哪些是测试方法

三.      编写测试方法

       测试方法返回值必须为void,且不能有任何参数

四.      还原测试环境

       需要利用@Before与@After来还原测试环境,使每个测试结果相互独立

五.      运行测试代码

       右键点击测试类,选择run as JUnit test

 

 

 

 

 

常用注解介绍:

      1. @Before:初始化方法,在任何一个测试执行之前必须执行的代码;

 

      2. @After:释放资源,在任何测试执行之后需要进行的收尾工作。在每个测试方法执行之后执行一次,该annotation只能修饰public void 方法;

 

      3. @Test:测试方法,表明这是一个测试方法。在Junit中将会自动被执行。该annotation只你呢个修饰public void 方法。对于方法的声明也有如下要求:名字可以随便取,           没有任何限制,但是返回值必须为void,而且不能有任何参数。如果违反这些规定,会在运行时抛出一个异常。至于方法内该写些什么,那就要看你需要测试些什么了;在这           里可以测试期望异常和超时时间,如 @Test(timeout = 100):我们给测试函数设定一个执行时间,超过了这个时间(100毫秒),它们就会被系统强行终止,并且系统还会           向你汇报该函数结束的原因是因为超时,这样你就可以发现这些Bug了。

 

      4. @Ignore:忽略的测试方法,标注的含义就是“某些方法尚未完成,暂不参与此次测试”;这样的话测试结果就会提示你有几个测试被忽略,而不是失败。一旦你完成了相应函           数,只需要把@Ignore标注删去,就可以进行正常的测试。

 

      5. @BeforeClass:针对所有测试,只执行一次,且必须为public static void;

 

      6. @AfterClass:针对所有测试,将会在所有测试方法执行结束后执行一次,且必须为public static void;

          所以一个Junit 4 的单元测试用例执行顺序为:@BeforeClass –> @Before –> @Test –> @After –> @AfterClass;每一个测试方法的调用顺序为:@Before –>               @Test –> @After。

 

常用断言介绍:

     1. assertEquals([String message],Object target,Object result)

         target与result不相等,中断测试方法,输出message

     

     2. assertEquals(a, b)

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

         assertEquals断言两个对象相等,若不满足,方法抛出带有相应信息的AssertionFailedError异常。

         例如计算器加法功能的测试可以使用以下验证:

         Assert.assertEquals(0,result);

 

     3. assertTrue/False([String message],Boolean result)

         Result为 false/true,中断测试方法,输出message

         assertTrue断言条件为真,若不满足,方法抛出带有相应信息的AssertionFailedError异常。

         assertFalse断言条件为假,若不满足,方法抛出带有相应信息的AssertionFailedError异常。

 

     4. assertNotNull/Null([String message],Obejct result

         Retult= = null/result!=null,中断测试方法,输出message

         assertNull 断言对象为null,若不满足,方法抛出带有相应信息的AssertionFailedError异常。

         assertNotNull 断言对象不为null,若不满足,方法抛出带有相应信息的AssertionFailedError异常。

 

     5. assertSame/NotSame(Object target,Object result)

         Traget与result 不指向/指向 同一内存地址(实例),中断测试方法,输出message

         assertNotSame断言两个引用指向不同对象,若不满足,方法抛出带有相应信息的AssertionFailedError异常。

         assertSame 断言两个引用指向同一个对象,若不满足,方法抛出带有相应信息AssertionFailedError异常。

 

     6. fail([String message])

         中断测试方法,输出messageFail  让测试失败,并给出指定信息。