高效单元测试

第1章 Junit起步

学习目标

1、了解软件测试的分类与相关概念;

2、理解单元测试的好处;

3、掌握JUnit框架;

4、掌握简单编写测试用例(重点、难点)


前言:

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。

单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

1、测试的分类

(按照全生命周期的软件测试概念,测试对象应该包括软件设计开发的各个阶段的内容)

(1)按照开发阶段划分

单元测试、集成测试、系统测试、确认测试和验收测试

(2)按照测试实施组织划分

开发方测试、用户测试(β测试)、第三方测试

(3)按照测试技术划分

白盒测试、黑盒测试、灰盒测试。也可划分为静态测试和动态测试。

2、测试的相关概念

重要的相关概念

白盒测试:把测试对象看作一个打开的盒子,程序内部的逻辑结构和其他信息对测试人员是公开的。

回归测试:软件或环境的修复或更正后的“再测试”,自动测试工具对这类测试尤其有用。

单元测试:是最小粒度的测试,以测试某个功能或代码块。一般由程序员来做,因为它需要知道内部程序设计和编码的细节。

JUnit :是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。主要用于白盒测试,回归测试。

3、单元测试好处

(1)提高开发速度——测试是以自动化方式执行的,提升了测试代码的执行效率。

(2)提高软件代码质量——它使用小版本发布至集成,便于实现人员除错。同时引入重构概念,让代码更干净和富有弹性。

(3)提升系统的可信赖度——它是回归测试的一种。支持修复或更正后的“再测试”,可确保代码的正确性。

4、介绍Junit

4.1、Junit设计目标:

  • 框架必须可以帮助我们编写有用的测试

  • 框架必须帮助我们创建随着时间的过去依旧保持有用的测试

  • 框架必须通过复用代码降代编写测试的成本

4.2Junit的特征

Junit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。它包括以下特性:

  • 1、用于测试期望结果的断言(Assertion)

  • 2、用于共享共同测试数据的测试工具

  • 3、用于方便的组织和运行测试的测试套件

  • 4、图形和文本的测试运行器

适用对象:Junit可以用于程序开发人员或专业测试人员进行单元测试。

5、Junit3 的语法

在Junit3中,所有的测试类都必须extends TestCase;

在Junit3中,所有的测试方法必须以“test"开头;

测试方法三步骤

  • 步骤1 构建对象

  • 步骤2 调用被测试方法,并输入参数

  • 步骤3、判断预期结果与真实结果是否一致

void setUp():每个测试方法执行之前,执行一次

void tearDown()每个测试方法执行之后,执行一次

6、Junit4 的语法

在Junit4中,有测试方法的类就是测试用例(testCase)

  • @Test声明的方法就是测试方法;

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

  • @ After:释放资源,在任何测试执行之后需要进行的收尾工作。跟3.x中的tearDown()方法具有相同功能

  • @BeforeClass:针对所有测试,在所有测试方法执行前执行一次,格式:@BeforeClass public static void method();

  • @AfterClass:针对所有测试,在所有测试方法执行结束后执行一次,格式:@AfterClass public static void method()

  • @Ignore:忽略的测试方法,标注的含义就是“某些方法尚未完成,暂不参与此次测试”

Junit 4 的单元测试用例执行顺序为:@BeforeClass –> @Before –> @Test –> @After –> @AfterClass;

每一个测试方法的调用顺序为:@Before –> @Test –> @After。

7、 Junit 3与4差异

image-20241216094708773

8、简单学习内容实验

8.1开发工具

img

8.2环境设置

image-20241216095129813

8.3 Junit3的基本语法及编写

1、新建Java项目“JunitTest2024_I”,并新建包lab1,包下创建类“Calculate”

 package lab1;
 ​
 import sun.jvm.hotspot.utilities.IntArray;
 ​
  
 ​
 public class Calculate {
 ​
     public int add(int a,int b) {
 ​
         return a+b;
 ​
     }
 ​
     
 ​
     public int sub(int a,int b) {
 ​
         return a-b;
 ​
     }
 ​
     
 ​
     public int mul(int a,int b) {
 ​
         return a*b;
 ​
     }
 ​
     
 ​
     public int div(int a,int b) {
 ​
         return a/b;
 ​
     }
 ​
 }

img

2、创建源文件夹“test”,在其下创建包lab1,用Junit3创建类“Calculate”的测试用例“CalculateTestWithJunit3”

 package lab1;
 ​
 import junit.framework.TestCase;
 import junit.framework.Assert;
 ​
 public class CalculateTestWithJunit3 extends TestCase {
     private Calculate cal;
 ​
     @Override
     public void setUp() throws Exception {
         super.setUp();
         cal = new Calculate(); 
     }
 ​
     @Override
     public void tearDown() throws Exception {
         super.tearDown();
     }
 ​
     public void testAdd() {
         int result = cal.add(2, -3);
         Assert.assertEquals(-1, result);
     }
 ​
     public void testSub() {
         int result = cal.sub(5, 3);
         Assert.assertEquals(2, result);
     }
 ​
     public void testMul() {
         int result = cal.mul(4, 3);
         Assert.assertEquals(12, result);
     }
 ​
     public void testDiv() {
         int result = cal.div(10, 2);
         Assert.assertEquals(5, result);
     }
 }

运行结果:

img

8.4Junit4的基本语法及编写

 package lab1;
 ​
 import static org.junit.Assert.assertEquals;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 ​
 public class CalculateTestWithJUnit4 {
     private Calculate cal;
 ​
     @BeforeClass
     public static void setUpBeforeClass() throws Exception {
         // 在所有测试方法之前执行一次,例如用于初始化全局资源
         System.out.println("BeforeClass: 初始化全局资源");
     }
 ​
     @AfterClass
     public static void tearDownAfterClass() throws Exception {
         // 在所有测试方法之后执行一次,例如用于清理全局资源
         System.out.println("AfterClass: 清理全局资源");
     }
 ​
     @Before
     public void setUp() throws Exception {
         // 在每个测试方法之前执行,例如用于初始化测试对象
         cal = new Calculate();
         System.out.println("Before: 初始化测试对象");
     }
 ​
     @After
     public void tearDown() throws Exception {
         // 在每个测试方法之后执行,例如用于清理或释放资源
         System.out.println("After: 释放测试资源");
     }
 ​
     @Test
     public void testAdd() {
         int result = cal.add(2, 3);
         assertEquals(5, result);
         System.out.println("TestAdd: 运行testAdd");
     }
 ​
     @Test
     public void testSub() {
         int result = cal.sub(5, 3);
         assertEquals(2, result);
         System.out.println("TestSub: 运行testSub");
     }
 ​
     @Test
     public void testMul() {
         int result = cal.mul(2, 3);
         assertEquals(6, result);
         System.out.println("TestMul: 运行testMul");
     }
 ​
     @Test
     public void testDiv() {
         int result = cal.div(6, 3);
         assertEquals(2, result);
         System.out.println("TestDiv: 运行testDiv");
     }
 }

运行结果:

img

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值