详解Python单元测试的两种写法
作者:什么都干的派森 发布时间:2023-02-13 06:04:20
标签:Python,单元测试
一、前言
python的两个单元测试包分别是 doctest 和 unittest,这两个包的使用起来各有长处,适用于不同的场景
doctest:直接写在方法体中,利用了 python 动态语言的特性,书写方式简单明了,前提是项目不要太大,如果项目复杂代码量大,再加上写在方法体中的单元测试,整体就会看起来有些臃肿,因此 doctest 适用于代码量不大的普通项目
unittest:一般写在独立文件中,与 spring 的单元测试有点像,项目结构清晰,不过简单项目中测试一些小功能的话实属dark不必了
二、实现
先写一个待测试的方法
def add(num1, num2):
return num1 + num2
1.doctest
def add(num1, num2):
"""
直接写在待测方法中
>>> add(14, 5)
19
>>> add(14, 5) > 1
True
>>> add(20, 30, 70)
Traceback (most recent call last):
...
TypeError: add() takes 2 positional arguments but 3 were given
"""
return num1 + num2
if __name__ == "__main__":
import doctest
doctest.testmod()
运行上面的代码什么都不会输出,因为预测结果全部正确,只有在预测结果错误的时候才会给提示
ps:
add(14, 5) 为测试方法,19 为预测结果
add(14, 5) > 1 为测试方法,True 为预测结果
add(20, 30, 70) 为测试方法,Traceback (most recent call last): 为异常抛出的第一句话【错误原因】,TypeError: add() takes 2 positional arguments but 3 were given 为异常抛出的最后一句话【异常类型:解释说明】,中间三个点省略了异常中的文件路径信息
2.unittest
import unittest
# 引入上面的待测试方法
from src.main.add import add
class TestStatisticalFunctions(unittest.TestCase):
def test_add(self):
self.assertEqual(add(14, 5), 19) # 断言 add(14, 5) 的结果为 19
self.assertTrue(add(14, 5) > 1, True) # 断言 add(14, 5) > 1 的结果为 True
with self.assertRaises(TypeError): # 断言 add(20, 30, 70) 抛出 TypeError 异常
add(20, 30, 70)
if __name__ == '__main__':
unittest.main()
同样,运行上面的代码什么都不会输出,因为预测结果全部正确,只有在预测结果错误的时候才会给提示
来源:https://blog.csdn.net/weixin_43721000/article/details/125649461
0
投稿
猜你喜欢
- 本文实例讲述了PHP闭包定义与使用。分享给大家供大家参考,具体如下:<?phpfunction getClosure($i){ &nb
- 使用数据库的过程中,由于断电或其他原因,有可能导致数据库出现一些小错误,比如检索某些表特别慢,查询不到符合条件的数据等。出现这些情况的原因,
- python继承,python丰富的类因为继承而变得多姿多彩,如果语言不支持继承,那么类就没什么优势。1、首先我们来定义两个类一个dog类,
- 如何为XHTML做好准备,XHTML与HTML 4.01标准没有太多的不同。所以将你的代码升级至4.01是个不错的开始。HTML 4.01参
- 本文实例讲述了python版本的读写锁操作方法。分享给大家供大家参考,具体如下:最近要用到读写锁的机制,但是python2.7的自带库里居然
- 先看几个数据。。一大堆文字滴,不管人家是不是故意的,字数还是这样:news.163.cn:14px,39个中文字符 news.sina.co
- 前言 相信很多时候大家都会用到虚拟环境,他具有可以让你快速切换不同的python版本,
- 学习前言上一篇讲了如何构建回归算法,这一次将怎么进行简单分类。Keras中分类的重要函数1、np_utils.to_categoricaln
- 本文实例展示了PHP实现的格鲁斯卡尔算法(kruscal)的实现方法,分享给大家供大家参考。相信对于大家的PHP程序设计有一定的借鉴价值。具
- 我就废话不多说了,大家还是直接看代码吧!file1 = 'C:\\Users\\Administrator\\Desktop\\te
- Brendan Eich于1995年在Netscape发明了JavaScript语言,这个语言在过去的一些年里曾是一个最被误解的语言,随着A
- 从本文开始,本系列将介绍python简单案例并进行代码展示,本文的案例是利用pandas库实现读取csv文件并按照列的从小到大进行排序。前言
- 引用PyMongo>>> import pymongo创建连接Connection>>> import
- 如下所示:"""提取文档数超过10000的数据按照某个字段的值具有唯一性进行升序,按照@timestamp进行
- 死锁是指在某组资源中,两个或两个以上的线程在执行过程中,在争夺某一资源时而造成互相等待的现象,若无外力的作用下,它们都将无法推进下去,死时就
- 前言可选链操作符(?.)允许读取位于链接对象链身处的属性的值,而不必明确验证链中的每个引用是否有效。不同之处在于,在引用为空(null或者u
- 阅读上一篇教程:WEB2.0网页制作标准教程(9)第一个CSS布局实例如果我们想在3列布局的最后加一行页脚,放版权之类的信息。就遇到必须对齐
- 一、绘制成品二、绘制代码实现本文效果的整体思路是:加载库—选择背景音乐—绘制心的外轮廓&md
- 细线边框是网页中定位区分内容常用的一种方法,配合特定图片的使用,往往能够达到不错的效果,那么如何制作细线边框呢?asp之家注:现在要实现这个
- 1、安装pip install mediapipe2、代码实现# -*- coding: utf-8 -*-""&quo