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

1. 关于unittest和pytest

unittest是python内置的支持单元测试的模块,他提供了核心类,TestCase,让单元测试

代码的编写不再是从0开始,不再是作坊式,而是标准化,模板化,工厂化。

pytest是第三方支持单元测试的扩展库,他和unittest配合,可以使你在为一个新的源码文件编写测试代码时,不用手动定义程序入口,以及要执行哪些表示测试的函数或类。你只需按照一个"套路"写测试代码,它会帮你运行测试,汇总测试结果(覆盖率,通过率等等)

2. 单元测试代码的编写

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

python 复制代码
class A:
    def fun(a:int,b:int)->int:
          return a+b
    def multi(a:int,b:int)->int:
          return a*b

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

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

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

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

python 复制代码
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扩展库,你还需要写一段样板代码,类似如下:

python 复制代码
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下运行测试

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

相关推荐
荔枝吻6 分钟前
【沉浸式解决问题】mysql-connector-python连接数据库:RuntimeError: Failed raising error.
数据库·python·mysql
码界筑梦坊8 分钟前
92-基于Django的豆瓣图书推荐系统的设计与实现
python·信息可视化·django
要长脑子了95610 分钟前
【论坛系统自动化功能测试报告】
运维·python·功能测试·selenium·pycharm·自动化·模块测试
这里有鱼汤10 分钟前
量化人必看|miniQMT踩坑记:回测太慢?一招教你把行情数据“搬回家”!
前端·python
WSSWWWSSW16 分钟前
Numpy科学计算与数据分析:Numpy数据分析基础之统计函数应用
开发语言·python·数据挖掘·数据分析·numpy
西猫雷婶33 分钟前
python学智能算法(三十四)|SVM-KKT条件回顾
开发语言·人工智能·python·算法·机器学习·支持向量机
都叫我大帅哥1 小时前
时间旅行者的秘密武器:LangGraph Checkpoint全解
python·langchain
雲_kumo1 小时前
python数据结构与算法(基础)
python
麦兜*9 小时前
Spring Boot集成方案 + Elasticsearch向量检索,语义搜索核弹
java·spring boot·python·spring·elasticsearch·spring cloud·系统架构
仪器科学与传感技术博士9 小时前
python:讲懂决策树,为理解随机森林算法做准备,以示例带学习,通俗易懂,容易理解和掌握
python·算法·决策树