当前位置: 首页 > news >正文

软件测试:1、单元测试

1. 单元测试的基本概念

  • 单元(Unit):软件系统的基本组成单位,可以是函数、模块、方法或类。

  • 单元测试(Unit Testing):对软件单元进行的测试,验证代码的正确性、规范性、安全性和性能。

  • 特点

    • 单元相互独立,互不影响。

    • 及时发现代码缺陷,降低纠错成本。

    • 主要由程序员负责,测试员辅助。

    • 可并行开展。

    • 依据《软件详细规格说明书》。

    • 以代码覆盖率作为评估标准。

    • 需要开发辅助的测试程序。

2. 动态测试

  • 驱动程序(Driver):模拟被测模块的上级模块,调用被测模块并传递测试数据。

  • 桩程序(Stub):模拟被测模块调用的下层模块,便于检查接口。

  • 示例:某程序将摄氏温度转换为华氏温度,测试GUI模块时需要配置驱动模块和桩模块。

3. 自动化单元测试框架JUnit

  • JUnit简介

    • 针对Java语言的单元测试框架,1997年由Erich Gamma和Kent Beck开发。

    • JUnit4对测试框架体系结构进行了重大调整,与JUnit3有较大不同。

    • JUnit的设计思想被抽象为xUnit框架,已移植到多种语言和环境中。

  • 技术特点

    • 简化测试代码编写。

    • 测试代码与产品代码分离。

    • 测试代码可自动运行。

    • 提供丰富的断言方法。

    • 支持固化方法(资源分配和释放)。

    • 可将测试用例组织成测试套件。

    • 支持文本和图形运行界面。

4. JUnit的测试类和测试方法

  • 测试类:包含测试代码,定义一组测试方法。

  • 测试方法:需满足以下条件:

    • 方法名用@Test注解修饰。

    • 必须用public void修饰。

    • 不带任何参数。

  • 示例

    java复制

    @Test
    public void test01() throws Exception {isu = new InsuredPerson(20, 'M', false);int p = isu.premium();assertEquals(600, p);
    }

5. JUnit的断言(Assertion)

  • 常用断言方法:

    • assertEquals(expected, actual):判断预期结果与实际结果是否相同。

    • assertArrayEquals(expected, actuals):判断数组是否相同。

    • assertSame(expected, actual):判断是否引用相同对象。

    • assertTrue(condition):判断条件是否为真。

    • assertNull(obj):判断对象是否为空。

    • fail():直接指示测试失败。

6. JUnit的固化方法(Fixture)

  • 固化方法:用于分配和释放资源。

    • @BeforeClass:类构造固化方法,测试前调用一次。

    • @AfterClass:类析构固化方法,测试后调用一次。

    • @Before:构造固化方法,每次执行测试方法前调用。

    • @After:析构固化方法,每次执行测试方法后调用。

  • 示例

    java复制

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {System.out.println("setUpBeforeClass");
    }
    @AfterClass
    public static void tearDownAfterClass() throws Exception {System.out.println("tearDownAfterClass");
    }
    @Before
    public void setUp() throws Exception {System.out.println("setUp");
    }
    @After
    public void tearDown() throws Exception {System.out.println("tearDown");
    }

7. 参数化测试

  • 参数化测试:将测试用例集组织在一个线性表中,JUnit框架遍历线性表,每次取出一条测试用例作为参数实例化一个测试类对象。

  • 参数化测试类的特征

    • @RunWith(Parameterized.class)注解修饰。

    • 定义一个存储测试用例的数据域集合。

    • 定义一个以测试用例为参数的构造方法。

    • 定义一个静态方法(用@Parameters注解修饰),返回测试用例线性表。

    • 定义至少一个测试方法。

8. 异常测试和超时测试

  • 异常测试:通过@Test(expected = 异常类.class)指定预期异常。

    java复制

    @Test(expected = Exception.class)
    public void test03() throws Exception {isu = new InsuredPerson(10, 'M', true);isu.premium();
    }
  • 超时测试:通过@Test(timeout = 超时时限)指定超时时间。

    java复制

    @Test(timeout = 1000)
    public void test() throws Exception {isu = new InsuredPerson(10, 'M', true);isu.premium();  /* 假设premium中包含超时操作 */
    }

9. 测试套件

  • 测试套件(Test Suite):一种特殊的测试类,包含若干其他测试类,执行测试套件即成批地自动执行套件中的所有测试类。

  • 特征

    • @RunWith(Suite.class)注解修饰。

    • @SuiteClasses({测试类1.class, 测试类2.class, ...})指定测试套件中包含的测试类。

    • 是一个空类,没有定义任何数据域和方法。

10. 实验练习提示

  • 教学目标:掌握JUnit的初级和高级用法,包括参数化测试类和编写测试套件。

  • 主要内容

    • 初级:核心运行器、固化方法、断言。

    • 高级:异常测试、参数化运行器、测试套件运行器。

  • 建议练习

    • 使用@Test注解的JUnit方法。

    • 使用assertEquals断言比较变量或对象。

    • 使用@Test(expected = Exception.class)注解的JUnit方法。

    • 使用@RunWith(Parameterized.class)@Parameters注解的JUnit方法。

    • 使用测试套件@RunWith(Suite.class)@SuiteClasses({})

总结

这份PPT详细介绍了单元测试的基本概念、JUnit框架的特点和使用方法,以及如何设计和运行测试用例。通过学习这些内容,可以掌握如何使用JUnit进行自动化单元测试,提高代码质量和测试效率。

相关文章:

软件测试:1、单元测试

1. 单元测试的基本概念 单元(Unit):软件系统的基本组成单位,可以是函数、模块、方法或类。 单元测试(Unit Testing):对软件单元进行的测试,验证代码的正确性、规范性、安全性和性能…...

球队训练信息管理系统设计与实现(代码+数据库+LW)

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装球队训练信息管理系统软件来发挥其高效地信息处理的作用&a…...

【Bluedroid】AVRCP 连接源码分析(二)

接着上一篇【Bluedroid】AVRCP 连接源码分析(一)-CSDN博客,继续AVRCP连接的源码分析。 getcapabilities_cmd packages/modules/Bluetooth/system/btif/src/btif_rc.cc /***************************************************************************** Function …...

OSS(对象存储服务)

OSS(对象存储服务) 是一种用于存储和管理非结构化数据的云存储服务,其核心设计面向海量数据的高扩展性、高可靠性和低成本存储。以下从定义、核心原理、架构特点和应用场景等方面详细介绍: 一、什么是OSS? OSS&#x…...

《深入理解JVM》实战笔记(二): 类加载机制与类加载器

序言 Java 语言的强大之处之一在于其动态加载的能力,使得 Java 程序可以在运行时加载新的类,而不需要在编译时确定所有的类信息。这一切都离不开 JVM 的类加载机制。本篇博客将详细探讨 JVM 的类加载过程以及类加载器的工作原理,帮助你更深入…...

ChromeDriver下载

平时为了下个驱动,到处找挺麻烦,收集了很多无偿分享给需要的人,仅供学习和交流。 ChromeDriver 102.0.5005.61 ChromeDriver 105.0.5195.102 ChromeDriver 108.0.5359.71 ChromeDriver 111.0.5563.64 ChromeDriver 116.0.5845.97 Chrom…...

《深度学习实战》第1集:深度学习基础回顾与框架选择

本专栏系列博文旨在帮助读者从深度学习的基础知识逐步进阶到前沿技术,涵盖理论、实战和行业应用。每集聚焦一个核心知识点,并结合实际项目进行实践,避免空谈理论,简洁明快,快速切入代码,所有代码都经过验证…...

Docker 部署AnythingLLM

两个指令搞定 1.下载镜像 docker pull mintplexlabs/anythingllm 2.运行容器 export STORAGE_LOCATION$HOME/anythingllm mkdir -p $STORAGE_LOCATION chmod -R 777 $STORAGE_LOCATION touch "$STORAGE_LOCATION/.env" docker run -d -p 3001:3001 \ --cap-add SY…...

泰山派RK3566移植QT,动鼠标时出现屏幕闪烁

总结: 交叉编译到 泰山派rk3566跑调海康摄像头的qt应用程序失败了。 X11无效窗口。 移植QT注意 屏幕分辨率不要改。改了执行QT的时候,framebuffer识别不出设备。 命令行安装QT-Creator sudo install 类似的指令安装Qt-Creator时,可能找不到编…...

关于Java 反射的简单易懂的介绍

目录 #0.总览 #1. 类的反射 ①介绍 ②获取 ③作用 获取构造函数: 创建实例: 字段操作: 方法操作: 获取修饰符: #2.总结 #0.总览 反射,官方是这样介绍它的: Reflection is a …...

市场趋势中突破确认的多维度判断方法

波动率突破策略是众多交易者广泛采用的重要交易策略之一。而在这一策略中,准确判断突破是否有效,是决定交易成败的关键环节。仅仅依据单一因素来确认突破,往往会使交易者陷入误判的困境,导致不必要的损失。因此,采用多…...

网络空间安全(2)应用程序安全

前言 应用程序安全(Application Security,简称AppSec)是一个综合性的概念,它涵盖了应用程序从开发到部署,再到后续维护的整个过程中的安全措施。 一、定义与重要性 定义:应用程序安全是指识别和修复应用程序…...

【MyBatis】CRUD、配置解析、ResultMap、分页实现

目录标题 1、Mybatis简介1.1、什么是MyBatis1.2、持久化1.3、持久层1.4、为什么需要MybatisMyBatis的优点 2.1、代码演示搭建实验数据库导入MyBatis相关 jar 包 03、CRUD操作3.1、namespace3.2、select3.3、insert3.4、update3.5、delete 04、MyBatis配置解析4、配置解析4.3、m…...

Linux系统编程之高级信号处理

概述 在前一篇文章中,我们介绍了signal函数、sigaction函数等基本的信号处理方法。在本篇中,我们将介绍信号处理的一些高级用法,包括:阻塞与解除阻塞、定时器等。 阻塞与解除阻塞 有时候,我们不希望某个信号立即被处理…...

深度学习驱动的车牌识别:技术演进与未来挑战

一、引言 1.1 研究背景 在当今社会,智能交通系统的发展日益重要,而车牌识别作为其关键组成部分,发挥着至关重要的作用。车牌识别技术广泛应用于交通管理、停车场管理、安防监控等领域。在交通管理中,它可以用于车辆识别、交通违…...

钉钉快捷免登录 通过浏览器打开第三方系统,

一、钉钉内跳转至浏览器的实现 使用钉钉JSAPI的跳转接口 在钉钉内通过dd.biz.navigation.openLink方法强制在系统浏览器中打开链接。此方法需在钉钉开发者后台配置应用权限,确保应用具备调用该API的资格37。 示例代码: dd.ready(() > {dd.biz.navigat…...

力扣——杨辉三角

题目链接&#xff1a; 链接 题目描述&#xff1a; 思路&#xff1a; 直接找规律&#xff0c;按照数学的思路来 每一行的列最大索引 < 行索引 实现代码&#xff1a; class Solution {public List<List<Integer>> generate(int numRows) {List<List<In…...

stm32108键C-B全调性_动态可视化乐谱钢琴

108键全调性钢琴 一 基本介绍1 项目简介2 实现方式3 项目构成 二 实现过程0 前置基本外设驱动1 声音控制2 乐谱录入&基础乐理3 点阵屏谱点动态刷新4 项目交互控制5 录入新曲子过程 三 展示&#xff0c;与链接视频地址1 主要功能函数一览2 下载链接3 视频效果 一 基本介绍 …...

mysql之规则优化器RBO

文章目录 MySQL 基于规则的优化 (RBO)&#xff1a;RBO 的核心思想&#xff1a;模式匹配与规则应用RBO 的主要优化规则查询重写 (Query Rewrite) / 查询转换 (Query Transformation)子查询优化 (Subquery Optimization) - RBO 的重中之重非相关子查询 (Non-Correlated Subquery)…...

MySQL数据库——表的约束

1.空属性&#xff08;null/not null&#xff09; 两个值&#xff1a;null&#xff08;默认的&#xff09;和not null&#xff08;不为空&#xff09; 数据库默认字段基本都是字段为空&#xff0c;但是实际开发时&#xff0c;尽可能保证字段不为空&#xff0c;因为数据为空没办法…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...