一、什么是单元测试
-
单元测试是针对最小的功能单元编写测试代码
-
Java程序最小的功能单元是方法
-
单元测试就是针对单个Java方法的测试
二、为什么要使用单元测试
2.1使用main()方法测试的缺点:
-
只能有一个main()方法 ,不能把测试代码分离;
-
没有打印出测试结果和期望结果;
-
需要一种测试框架,帮助我们编写测试。
2.2单元测试的好处:
-
确保单个方法运行正常;
-
如果修改了代码,只需要确保其对应的单元测试通过;
-
测试代码本身就可以作为实例代码;
-
可以自动化运行所有测试并获得报告。
JUnit单元测试框架介绍
断言
断言方法 | 描述 |
---|---|
assertNull(java.lang.Object object) | 检查对象是否为空 |
assertNotNull(java.lang.Object object) | 检查对象是否不为空 |
assertEquals(long expected, long actual) | 检查long类型的值是否相等 |
assertEquals(double expected, double actual, double delta) | 检查指定精度的double值是否相等 |
assertFalse(boolean condition) | 检查条件是否为假 |
assertTrue(boolean condition) | 检查条件是否为真 |
assertSame(java.lang.Object expected, java.lang.Object actual) | 检查两个对象引用是否引用同一对象(即对象是否相等) |
assertNotSame(java.lang.Object unexpected, java.lang.Object actual) | 检查两个对象引用是否不引用统一对象(即对象不等) |
单元测试实战
public class TestService {
@BeforeClass
public static void beforeClass() {
System.out.println("BeforeClass");
}
@AfterClass
public static void afterClass() {
System.out.println("AfterClass");
}
@Before
public void before(){
System.out.println("before");
}
@org.junit.Test
public void test(){
System.out.println("Test");
}
@org.junit.Test
public void test2(){
System.out.println("Test2");
}
@After
public void after(){
System.out.println("after----------");
}
}
注意:测试类和方法都要声明为public
1.使用@Before和@After
–同一个单元测试内的多个测试方法:测试前都需要初始化某些对象,测试后可能需要清理资源;Junit使用@Before和@After可以实现,在@Before方法中初始化测试资源,在@After方法中释放测试资源。
–JUnit对每个@Test方法:执行过程
1、实例化CalCulatorTest;
2、执行@Before方法;
3、执行@Test方法;
4、执行@After方法。
注意: 使用@Before和@After可以保证:
–单个@Test方法执行前会创建新的XxxTest实例;实例变量的状态不会传递给下一个@Test方法。
–单个@Test方法执行前后会执行@Before和@After方法。
2.使用@BeforeClass 和@AfterClass静态方法(过程):
1、在执行所有@Test方法前执行@BeforeClass 标注的静态方法;
2、执行所有测试
3、在执行所有@Test方法后执行@AfterClass静态方法。
注意:@BeforeClass 静态方法初始化的对象只能存放在静态字段中,静态字段的状态会影响到所有的@Test
3.@Before、@After、@BeforeClass、@AfterClass使用场景
–@Before : 初始化测试对象;例如:input=new FileInputStream();
–@After :销毁@Before创建的测试对象,;例如:input.Close();
–@BeforeClass:初始化非常耗时的资源,例如:创建数据库。
–@AfterClass:清理@BeforeClass创建的资源,例如:删除数据库。
4.总结:理解JUnit执行测试的生命周期
1、@Before用于初始化测试对象,测试对象以实例变量存放;
2、@After用于清理@Before创建的对象
3、@BeforeClass用于初始化耗时资源,以静态变量存放;
4、@AfterClass用于清理@BeforeClass创建的资源。