单元测试
Table of Contents
一、单元测试介绍
1. 单元测试定义
来自维基百科
在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。
通常来说,程序员每修改一次程序就会进行最少一次单元测试,在编写程序的过程中前后很可能要进行多次单元测试,以证实程序达到软件规格书要求的工作目标,没有程序错误;虽然单元测试不是必须的,但也不坏,这牵涉到项目管理的政策决定。
2. 单元测试的收益
- 适应变更,一旦变更导致错误发生,借助于单元测试可以快速定位并修复错误。
- 简化集成,单元测试消除程序单元的不可靠,采用自底向上的测试路径。通过先测试程序部件再测试部件组装,使集成测试变得更加简单。
- 文档记录,单元测试提供了系统的一种文档记录。
- 表达设计,在测试驱动开发的软件实践中,单元测试可以取代正式的设计。每一个单元测试案例均可以视为一项类、方法和待观察行为等设计元素。(驱动设计时,单元测试先于程序设计)
3. 单元测试的编写时机
- 一是在具体实现代码之前,这是测试驱动开发(TDD)所提倡的;
- 二是与具体实现代码同步进行。先写少量功能代码,紧接着写单元测试(重复这两个过程,直到完成功能代码开发)。
- 三是编写完功能代码再写单元测试。(可能会导致单元测试的“粒度”都比较粗)
二、JUnit4 详解
1. 什么是JUnit
JUnit 是 java 编程语言的单元测试框架,用于编写和运行可重复的自动化测试。相比于使用原始方法:print 打印观察,更加方便和高效。
2. JUnit4 常用注解与断言
注解
断言
3. JUnit4 使用
-
Maven 构建项目,并引入 Maven 包
1 2 3 4 5 6
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency>
-
测试 Hello World
1 2 3 4 5 6 7 8 9 10 11 12 13
package com.qixianxian.junit4; import org.junit.Test; import static org.junit.Assert.assertEquals; public class HelloWorldTest { @Test public void firstTest() { assertEquals(2, 1 + 1); } }
-
测试生命周期
- @BeforeClass:通常用来为后面测试方法的准备工作,如加载配置、进行数据库的连接等。父类的@BeforeClass注解方法会在子类的@BeforeClass注解方法执行前执行。需要使用static 来修饰方法。
- @AfterClass:通常用来对资源进行释放,比如数据库连接的关闭等。
- @After、@Before 参考上文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
package com.qixianxian.junit4; import org.junit.*; public class StandardTest { @BeforeClass public static void beforeClass() { System.out.println("in before class"); } @AfterClass public static void afterClass() { System.out.println("in after class"); } @Before public void before() { System.out.println("in before"); } @After public void after() { System.out.println("in after"); } @Test public void testCase1() { System.out.println("in test case 1"); } @Test public void testCase2() { System.out.println("in test case 2"); } }
-
断言测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
package com.qixianxian.junit4; import org.junit.*; import org.junit.Test; public class AssertionTest { @Test public void test() { String obj1 = "junit"; String obj2 = "junit"; String obj3 = "test"; String obj4 = "test"; String obj5 = null; int var1 = 1; int var2 = 2; int[] array1 = {1, 2, 3}; int[] array2 = {1, 2, 3}; Assert.assertEquals(obj1, obj2); Assert.assertSame(obj3, obj4); Assert.assertNotSame(obj2, obj4); Assert.assertNotNull(obj1); Assert.assertNull(obj5); Assert.assertTrue(var1 < var2); Assert.assertFalse(var1 > var2); Assert.assertArrayEquals(array1, array2); } }
三、参考内容
Read other posts