概述: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 让测试失败,并给出指定信息。