【单元测试】

一、框架

不同的编程语言有不同的测试框架,以下是一些常见的测试框架:

1)Java:JUnit、TestNG2)Python:unittest、pytest3)JavaScript:Jest、Mocha4)C#:NUnit、xUnit5)C++:Google Test

二、编写单元测试的步骤

1、确定测试目标

首先,明确你要测试的函数或方法的功能。例如,一个函数的目的是计算两个数的和,那么测试目标就是验证这个函数在各种输入下都能正确返回结果。

 2、编写测试用例

  • 正常输入:测试函数在正常输入下的行为。例如,对于加法函数,输入两个正数、两个负数、一个正数一个负数等。

  • 边界输入:测试函数在边界条件下的行为。例如,输入最大值、最小值、零等。

  • 异常输入:测试函数在异常输入下的行为。例如,输入非法类型(如字符串代替数字)、空值等。

  • 特殊输入:测试函数在特殊条件下的行为。例如,输入两个相同的数、输入两个相反数等。

3、编写测试代码(用例开发) 

  • 使用测试框架提供的语法和功能编写测试代码。以下是2个简单的例子:

1)示例:Python 中的单元测试

假设有一个函数 add,用于计算两个数的和:

Python复制

def add(a, b):return a + b

使用 unittest 框架编写单元测试:

Python复制

import unittestclass TestAddFunction(unittest.TestCase):def test_add_positive_numbers(self):self.assertEqual(add(2, 3), 5)def test_add_negative_numbers(self):self.assertEqual(add(-1, -1), -2)def test_add_zero(self):self.assertEqual(add(0, 0), 0)def test_add_mixed_numbers(self):self.assertEqual(add(-1, 1), 0)def test_add_with_non_numeric_input(self):with self.assertRaises(TypeError):add("a", 1)if __name__ == '__main__':unittest.main()
2)示例:Java 中的单元测试

假设有一个类 Calculator,其中有一个方法 add

java复制

public class Calculator {public int add(int a, int b) {return a + b;}
}

使用 JUnit 框架编写单元测试:

java复制

import static org.junit.Assert.assertEquals;
import org.junit.Test;public class CalculatorTest {@Testpublic void testAddPositiveNumbers() {assertEquals(5, new Calculator().add(2, 3));}@Testpublic void testAddNegativeNumbers() {assertEquals(-2, new Calculator().add(-1, -1));}@Testpublic void testAddZero() {assertEquals(0, new Calculator().add(0, 0));}@Testpublic void testAddMixedNumbers() {assertEquals(0, new Calculator().add(-1, 1));}
}

三、运行单元测试

  • 运行测试:使用测试框架提供的工具运行测试。例如,在 Python 中可以运行 unittest.main(),在 Java 中可以使用 IDE 的测试运行功能。

  • 检查结果:确保所有测试用例都通过。如果有测试失败,需要检查代码并修复问题。

四、维护单元测试

  • 更新测试用例:当代码发生变化时,需要更新测试用例以确保测试的完整性。

  • 持续集成:将单元测试集成到持续集成(CI)流程中,确保每次代码提交都能自动运行测试。

五、最佳实践(单测的应用)

  1. 测试覆盖率尽量提高测试覆盖率,确保代码的每个分支和逻辑都被测试到。

  2. 独立性:每个测试用例应该是独立的,不依赖于其他测试用例。

  3. 可读性:测试代码应该清晰易懂,便于维护。

  4. 自动化将单元测试集成到自动化测试流程中,确保每次代码提交都能自动运行测试。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K8S学习之基础五十一:k8s部署jenkins

k8s部署jenkins 创建nfs共享目录, mkdir -p /data/v2 echo /data/v2 *(rw,no_root_squash) > /etc/exports exportfs -arv创建pv、pvc vi pv.yaml apiVersion: v1 kind: PersistentVolume metadata:name: jenkins-k8s-pv spec:capacity:storage: 1GiaccessMod…

印刷电路板 (PCB) 的影响何时重要?在模拟环境中导航

我和我的同事们经常被问到关于 PCB 效应的相同问题,例如: 仿真何时需要 PCB 效果? 为什么时域仿真需要 PCB 效应? 当 PCB 效应必须包含在仿真中时,频率是否重要? 设计人员应该在多大程度上关注 VRM 模型中包…

车载以太网网络测试 -24【SOME/IP概述】

目录 1 摘要2 车载SOME/IP 概述2.1发展背景以及应用2.1.1车载 SOME/IP 背景2.1.2 车载 SOME/IP 应用场景 2.3 什么是SOME/IP2.3.1 SOME/IP定义2.3.2 SOME/IP在协议栈中的位置 3 SOA是什么4 SOME/IP主要功能5 SOME/IP标准 1 摘要 本文主要介绍SOME/IP的背景以及在车载行业的发展…

如何在 Postman 中导入和导出 cURL 命令?

cURL 是一款广受欢迎的命令行工具,专门用于执行 HTTP 请求。它在 Web 应用或 API 测试中极为实用,让用户得以借助在 API 开发者社区广为流行的成熟语法,直接通过命令行与 API 进行交互。若你需要在多个环境下运行众多 cURL 命令,可…

K8S学习之基础五十五:k8s中jenkins部署blueOcean

jenkins部署blueOcean 安装插件 BLUE OCEAN 之后会多出一个菜单,可以更详细方便的查看pipeline流程

宝塔docker flarum默认登录账号密码,crazymax/flarum镜像默认登录账号密码

docker flarum默认账号密码 刚创建完毕时的登录账号和密码都是flarum 来源说明 宝塔安装的这个1.8.5版本的docker flarum的版本是,用的是 Docker库 https://hub.docker.com/r/crazymax/flarum Github库 https://github.com/crazy-max/docker-flarum

3.26学习总结

今天主要学习了内部类,但总感觉有点混乱,和之前的抽象啊,接口,多态等概念联系在一起感觉更混乱了,所以打算先把最近学的理清一遍,敲一遍代码再往后学

如何快速解决 Postman 报错?

介绍一些 Postman 常见的报错与处理方法,希望能够对大家有所帮助。 Postman 一直转圈打不开的问题 Postman 报错处理指南:常见报错与解决方法

高铁监控存储扩容-DS SAN存储磁盘阵列

国家高铁建设之内蒙包银高铁线路段--近期升级改造车站监控设备存储扩容,每个车站的机房承载本站数百个监控点位的数据,现因监控服务器存储空间不足,选用Infortrend DS SAN存储磁盘阵列升级设备存储空间,单台DS最高支持448颗硬盘容…

rnn的ho的维度 (num_layers * num_directions, batchsize, hidden_size)

因为是多层rnn 所以h0 需要 num_layers 来定义几层 这里的hidden_size 其实也就是h中有多少个神经元的个数

同旺科技USB to I2C 适配器 ---- 多从机设备混合调试

所需设备: 内附链接 1、同旺科技USB to I2C 适配器 1、还在为一条I2C总线上出现多个从机设备而烦恼吗?现在这些都可以轻松解决了,在 "发送数据" 栏里面,修改指令的从机地址就可以了,同时支持7Bit、8Bit地址…

如何下载 Postman?快速指南!

Postman 是一款非常受欢迎的 API 测试工具。它最初是作为一个 Chrome 插件发布,后来发展成为一款独立的跨平台软件,支持 Windows、Mac、Linux 等操作系统。 Postman 怎么下载教程(2025最新版)?

VSCode 抽风之 两个conda环境同时在被激活

出现了神奇的(toolsZCH)(base) 提示符,如下图所示: 原因大概是:conda 环境的双重激活:可能是 conda 环境没有被正确清理或初始化,导致 base 和 toolsZCH 同时被激活。 解决办法就是 :conda deactivate 两次…

idea接入 AI 编程助手:Copilot

1.1 安装 GitHub Copilot 插件 打开 IntelliJ IDEA,进入 File > Settings(Windows)或 Preferences(Mac)。在 Plugins 搜索 GitHub Copilot。点击 Install 并重启 IDEA。 1.2 配置 GitHub Copilot 进入 Settings &g…

23种设计模式-工厂方法(Factory Method)设计模式

工厂方法设计模式 🚩什么是工厂方法设计模式?🚩工厂方法模式的特点🚩工厂方法模式的结构🚩工厂方法模式的优缺点🚩抽象工厂模式的Java实现🚩代码总结🚩总结 🚩什么是工厂…

LLM之Agent(十四)| 字节开源ComputerUse纯视觉驱动GUI 智能体模型 UI-TARS

Agent TARS 是字节跳动于 2025 年 3 月开源的多模态 AI 智能体,它能够像人类一样操作电脑、手机和网页,完成各种复杂任务。以下是其详细介绍: 一、简介 Agent TARS 是一款开源的多模态 AI 智能体,能够基于视觉理解网页内容&#…

科技赋能|ZGIS综合管网智能管理平台守护地下城市生命线

地下管网作为城市公共安全的重要组成部分,担负着城市的信息传递、能源输送、排涝减灾等重要任务,是维系城市正常运行、满足群众生产生活需要的重要基础设施,是城市各功能区有机连接和运转的维系,因此,也被称为城市“生…

AI-Sphere-Butler之Ubuntu服务器如何部署Nginx代理,并将HTTP升级成HTTPS,用于移动设备访问

环境: AI-Sphere-Butler WSL2 Ubuntu22.04 Nginx 问题描述: AI-Sphere-Butler之Ubuntu服务器如何部署Nginx代理,并将HTTP升级成HTTPS,用于移动设备访问 解决方案: 一、生成加密证书 1.配置OpenSSL生成本地不加…

游戏引擎学习第180天

我们将在某个时候替换C标准库函数 今天我们要进行的工作是替换C标准库函数,这是因为目前我们仍然在使用C语言开发,并且在某些情况下会调用C标准库函数,例如一些数学函数和字符串格式化函数,尤其是在调试系统中,我们使…

C/S与B/S架构

目录 C/S架构 什么是C/S架构 优缺点 B/S架构 什么是B/S架构 优缺点 对比项C/S 架构B/S 架构安装相对复杂,要安装单独客户端软件易于安装,与平台无关,只需要浏览器软件部署和维护部署维护较为繁琐,升级难易于部署和维护&…