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

如何使用unittest和pytest进行python脚本的单元测试

1. 关于unittest和pytest

unittest是python内置的支持单元测试的模块,他提供了核心类,TestCase,让单元测试
代码的编写不再是从0开始,不再是作坊式,而是标准化,模板化,工厂化。
pytest是第三方支持单元测试的扩展库,他和unittest配合,可以使你在为一个新的源码文件编写测试代码时,不用手动定义程序入口,以及要执行哪些表示测试的函数或类。你只需按照一个”套路“写测试代码,它会帮你运行测试,汇总测试结果(覆盖率,通过率等等)

2. 单元测试代码的编写

假设我有一个名为”X.py"的脚本文件,其中定义了一个名为A的类,我想对A中的方法add和mult进行测试:

class A:def fun(a:int,b:int)->int:return a+bdef multi(a:int,b:int)->int:return a*b

则推荐的编写测试A的流程如下:

2.1 新建一个名为test_A.py文件

这个文件用于存放对A这个类进行单元测试的代码。一般来说,建议把你项目中所有测试模块文件都放到项目根目录下的tests目录中,便于维护。

2.2 在test_A.py文件中定义测试类(继承unittest.TestCase)

from unittest import TestCase
class TestA(TestCase):def setUp(self):"""所有以test_开头的方法执行之前都会调用该方法,通常在这个方法中创建一个或若干你要测试的类的实例"""...self.obj_a = A(...)...def test_add(self):result = self.obj_a.add(3,5)self.assertEqual(result,8) #检测结果是否为期望值8,若不是,该测试方法不通过def test_multi(self):result = self.obj_a.multi(4,5)self.assertEqual(result,20) #功能与上类似,TestCase还提供了很多其他以assert为前缀的方法,满足我们将实际运行结果与期望值比较的需求。

2.3 运行测试代码文件,查看测试结果

如果不使用pytest扩展库,你还需要写一段样板代码,类似如下:

def main():...test_a = TestA()test_a.test_add()test_a.test_multi()...

这令人烦恼。好在pytest让你可以省去这个麻烦,只要你安装好了pytest,那么,可以采取两种方法运行测试:
方法1:命令行运行pytest执行单元测试
方法2:在pycharm环境执行单元测试

2.3.1 在命令行下允许pytest单元测试

命令行下,进入tests目录,执行如下命令:
pytest
即可看到所有以test_开头的方法或函数的执行过程及结果。
记住,最好是虚拟环境下安装包括pytest在内的各种扩展库。

2.3.2 在pycharm IDE下运行测试

这个非常方便,打开测试脚本文件,单击下图所示的运行按钮,即可出现测试结果。
在这里插入图片描述

http://www.lryc.cn/news/423855.html

相关文章:

  • Java中的值传递与引用传递
  • Seaborn库
  • openresty整合modsecurity
  • 结构体structure、共用体union
  • Spring自动注册-<bean>标签和属性解析
  • 【仿RabbitMQ消息队列】基于C++11中packaged_tack异步线程池
  • 免费下载专利
  • CentOS7安装流程步骤详细教程
  • 【大模型从入门到精通17】openAI API 构建和评估大型语言模型(LLM)应用5
  • 苹果手机无iCloud备份下“最近删除”照片的恢复策略
  • Docker搭建Minio容器
  • 【C++】多源BFS问题和拓扑排序
  • CentOS 7 安装详细教程
  • mybatis-plus + springboot 多对多实例
  • SpringBoot日志整合
  • 信创教育:培养未来科技创新的生力军
  • slowfast
  • 怎么调试python脚本
  • Flask获取请求信息
  • Overleaf中放置高分辨率图片的方法
  • 【C语言】动态内存管理(malloc,free,calloc,realloc详解 )
  • 如何寻找数值仿真参数最优解?CFD参数优化详解3来袭
  • 虚拟机macos中构建llvm、clang并配置Xcode
  • Java 中的 @SneakyThrows 注解详解:简化异常处理的利与弊
  • 系统编程 day11 进程(线程)3
  • [ Python 原理分析 ]如何实现用户实现博客文章点赞-物联网Python
  • 【47 Pandas+Pyecharts | 杭州二手房数据分析可视化】
  • C++入门基础知识13
  • IP地址证如何实现HTTPS访问?(内网IP、公网IP)
  • 东土科技车规级网络芯片获批量应用