软件测试: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进行自动化单元测试,提高代码质量和测试效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/973538.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 大视界 -- 国际竞争与合作:Java 大数据在全球市场的机遇与挑战(94)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

1.16作业

1 进注册界面,第一次以为抓包选把isadmin ture了就好 第二次尝试,勾选is admin,有需要invitecode(经典) 2 p r**5 r**4 - r**3 r**2 - r 2023 q r**5 - r**4 r**3 - r**2 r 2023 n 25066797992811602609904…

MybatisPlus教程-从入门到进阶

前言 首先它是国产的,所以直接用官网的简介。 简介 MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 特性 无侵入:只做增强不做改变,引入它不会对现有…

算法1-4 数楼梯

题目描述 楼梯有 N 阶,上楼可以一步上一阶,也可以一步上二阶。 编一个程序,计算共有多少种不同的走法。 输入格式 一个数字,楼梯数。 输出格式 输出走的方式总数。 输入输出样例 输入 #1 4 输出 #1 5 说明/提示 对于…

DigitalOcean H200 GPU裸机服务器上线!可更好支持DeepSeek满血版

在 DigitalOcean,我们始终致力于为开发者、初创企业和人工智能驱动型公司提供更便捷的高性能计算资源,助力其业务扩展。今日,DigitalOcean 隆重推出基于 NVIDIA HGX H200 AI 超级计算平台的裸机服务器,专为高性能AI工作负载而生。…

企业组网IP规划与先关协议分析

目录 一、IP编址 1、IP地址组成 2、IP地址表达 3、IP 地址分类 4、IP地址类型 5、IP网络通信 6、子网掩码 7、默认子网掩码 8、IP 地址规划 9、有类IP编制缺陷 10、VLSM 11、变长子网掩码案例 12、网关 13、无类域间路由 一、IP编址 网络层位于数据链路层与传输层之间…

Python之装饰器三 踩坑(带参数,不带参数,两者都带参数)

文章目录 前言一、装饰器不带参数(但是装修器内部的函数又需要参数)二、装饰器带参数(但是被装饰的函数不带参数)三、装饰器带参数(并且被装饰的函数也带参数)总结前言 Python装饰器里面遇到的踩坑点,以及自己的理解。 一、装饰器不带参数(但是装修器内部的函数又需要…

蓝桥杯好数

样例输入: 24 输出:7 输入:2024 输出: 150 思路:本题朴素方法的时间复杂度是O(n * log10(n)) ,不超时。主要考察能否逐位取数,注意细节pi,这样不会改变i,否则会导致循环错误。 #in…

人工智能之自动驾驶技术体系

自动驾驶技术体系 自动驾驶技术是人工智能在交通领域的重要应用,旨在通过计算机视觉、传感器融合、路径规划等技术实现车辆的自主驾驶。自动驾驶不仅能够提高交通效率,还能减少交通事故和环境污染。本文将深入探讨自动驾驶的技术体系,包括感…

Vue 实现通过URL浏览器本地下载 PDF 和 图片

1、代码实现如下: 根据自己场景判断 PDF 和 图片,下载功能可按下面代码逻辑执行 const downloadFile async (item: any) > {try {let blobUrl: any;// PDF本地下载if (item.format pdf) {const response await fetch(item.url); // URL传递进入i…

Microsoft 365 Copilot中使用人数最多的是哪些应用

今天在浏览Microsoft 365 admin center时发现,copilot会自动整理过去30天内所有用户使用copilot的概况: 直接把这个图丢给copilot让它去分析,结果如下: 总用户情况 总用户数在各应用中均为 561 人,说明此次统计的样本…

Spring Boot (maven)分页4.0.1版本 专业版- 改

前言: 通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往…

装修流程图: 装修前准备 → 设计阶段 → 施工阶段 → 安装阶段 → 收尾阶段 → 入住

文章目录 引言I 毛坯房装修的全流程**1. 装修前准备****1.1 确定装修预算****1.2 选择装修方式****1.3 选择装修公司****1.4 办理装修手续****2. 设计阶段****2.1 量房****2.2 设计方案****2.3 确认方案****3. 施工阶段****3.1 主体拆改****3.2 水电改造****3.3 防水工程****3.…

若依-@Excel新增注解numberFormat

Excel注解中原本的scale会四舍五入小数,导致进度丢失 想要的效果 显示的时候保留两个小数真正的数值是保留之前的数值 还原过程 若以中有一個專門的工具类,用来处理excel的 找到EXCEL导出方法exportExcel()找到writeSheet,写表格的方法找到填充数据的方法…

鸿蒙5.0实战案例:基于自定义注解和代码生成实现路由框架

往期推文全新看点(文中附带全新鸿蒙5.0全栈学习笔录) ✏️ 鸿蒙(HarmonyOS)北向开发知识点记录~ ✏️ 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ ✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景&#…

让浏览器AI起来:基于大模型Agent的浏览器自动化工具

最近有个非常火的项目,利用大模型Agent驱动浏览器完成各种操作,如网页搜索、爬虫分析、机票酒店预定、股票监控等,号称全面替代所有在浏览器上的操作,试用方式还是比较简单的,以下将进行简单介绍。 快速开始 通过pip安装: pip install browser-use安装web自动化框架:…

模电知识点总结(6)

1.选取频率高于1000Hz的信号时,可选用高通滤波器;抑制50Hz的交流干扰时,可选用带阻滤波器如果希望抑制500Hz以下的信号,可选用高通滤波器。 2.有用信号频率高于1000Hz,可选用高通滤波器;希望抑制50Hz的交流…

MyBatis:动态SQL高级标签使用方法指南

一、引言 目前互联网大厂在搭建后端Java服务时,常使用Springboot搭配Mybatis/Mybatis-plus的框架。Mybatis/Mybatis-plus之所以能成为当前国内主流的持久层框架,与其本身的优点有关:支持定制动态 SQL、存储过程及高级映射,简化数…

快速入门——Axios网络请求

学习自哔哩哔哩上的“刘老师教编程”,具体学习的网站为:11.Axios网络请求_哔哩哔哩_bilibili,以下是看课后做的笔记,仅供参考。 第一节Axios的使用 第二节与Vue整合 第三节跨域 第一节Axios的使用 在实际项目开发中&#xff0…

Typora的Github主题美化

对Typora的Github主题进行一些自己喜欢的修改,主要包括:字体、代码块、表格样式 美化前: 美化后: 字体更换 之前便看上了「中文网字计划」的「朱雀仿宋」字体,于是一直想更换字体,奈何自己拖延症作祟&#…