首页 > 编程语言 >Python - 单元测试

Python - 单元测试

时间:2023-10-25 16:57:37浏览次数:33  
标签:arr Python unittest 单元测试 m1 m3 m2 self

总结

 

一、如何进行单元测试

注意点:

  1. import unittest
  2. 需要创建一个类TestSort,继承类‘unittest.TestCase’
  3. 然后,在这个类TestSort中定义相应的测试函数 test_sort(),进行测试。注意,测试函数要以‘test’开头
  4. 而测试函数的内部,通常使用 assertEqual()、assertTrue()、assertFalse() 和 assertRaise() 等 assert 语句对结果进行验证。
import unittest

# 将要被测试的排序函数
def sort(arr):
    l = len(arr)
    for i in range(0, l):
        for j in range(i + 1, l):
            if arr[i] >= arr[j]:
                tmp = arr[i]
                arr[i] = arr[j]
                arr[j] = tmp


# 编写子类继承unittest.TestCase
class TestSort(unittest.TestCase):

   # 以test开头的函数将会被测试
   def test_sort(self):
        arr = [3, 4, 1, 5, 6]
        sort(arr)
        # assert 结果跟我们期待的一样
        self.assertEqual(arr, [1, 3, 4, 5, 6])

if __name__ == '__main__':
    ## 如果在Jupyter下,请用如下方式运行单元测试
    unittest.main(argv=['first-arg-is-ignored'], exit=False)
    
    ## 如果是命令行下运行,则:
    ## unittest.main()
    
## 输出
..
----------------------------------------------------------------------
Ran 2 tests in 0.002s

OK

 

二、单元测试如何替换依赖项

mock - 屏蔽复杂逻辑

我们定义了一个类的三个方法 m1()、m2()、m3()。我们需要对 m1() 进行单元测试,但是 m1() 取决于 m2() 和 m3()。如果 m2() 和 m3() 的内部比较复杂, 你就不能只是简单地调用 m1() 函数来进行测试. 我们可以:

  • 把 m2() 替换为一个返回具体数值的 value,
  • 把 m3() 替换为另一个 mock(空函数)

这样,测试 m1() 就很容易了,我们可以测试 m1() 调用 m2(),并且用 m2() 的返回值调用 m3()。

import unittest
from unittest.mock import MagicMock

class A(unittest.TestCase):
    def m1(self):
        val = self.m2()
        self.m3(val)

    def m2(self):
        pass

    def m3(self, val):
        pass

    def test_m1(self):
        a = A()
        a.m2 = MagicMock(return_value="custom_val")
        a.m3 = MagicMock()
        a.m1()
        self.assertTrue(a.m2.called) #验证m2被call过
        a.m3.assert_called_with("custom_val") #验证m3被指定参数call过
        
if __name__ == '__main__':
    unittest.main(argv=['first-arg-is-ignored'], exit=False)

## 输出
..
----------------------------------------------------------------------
Ran 2 tests in 0.002s

OK

 

 

mock side_effect - 屏蔽复杂逻辑的同时,可以根据不同的输入返回不同的数值

比如下面这个示例,测试的是输入参数是否为负数,输入小于 0 则输出为 1 ,否则输出为 2。

from unittest.mock import MagicMock
def side_effect(arg):
    if arg < 0:
        return 1
    else:
        return 2
mock = MagicMock()
mock.side_effect = side_effect

mock(-1)
1

mock(1)
2

 

 

patch

需要再理解:http://www.manongjc.com/detail/51-aqimxrkdzrjvtlu.html

 

标签:arr,Python,unittest,单元测试,m1,m3,m2,self
From: https://www.cnblogs.com/frankcui/p/17787337.html

相关文章

  • python 抓取优财网Libor利率数据,并使用BeautifulSoup解析
    需求背景:需求是用程序抓取优财网Libor查询伦敦银行同业拆借利率-数据中心-优财网-优财金融数据金融资讯门户官方网站-UCAI123.COM Libor数据,USD的实现思路:没找到优财网的开放API,只能通过读取网页数据,用BeautifulSoup来解析数据,至于为啥不用pandas来解析,是因为pandas适合解析有......
  • 《流畅的Python》 读书笔记 第5章 一等函数 20231025
    第5章一等函数第四章相对偏僻,但时间上一样要花我很久,就先跳过了,回头再补。而这个第5章节是非常重要的。只是最近工作有点忙,我读的越来越慢了~继续坚持吧。在Python中,所有函数都是一等对象,整数、字符串和字典都是一等对象(注:first-classobject)要成为一等对象,需要满足......
  • python练习.10
    问:计算1**1+2**2+3**3+...+n**n#方法一su=0x=int(input("请输入你想输入的值:"))foriinrange(1,x+1):su+=i**iprint(f"最后的值为:{su}")#方法二defAyue(n):returnn**nm=int(input("请输入你想要计算的值:"))x=0i=1while(i<=m):......
  • python练习.11
    问:让用户输入值,值中的a用*代替x=str(input("请输入你的值:"))if"a"notinx:print(x)else:print(x.replace('a','*')) ......
  • python练习.9
    问:计算100以内自然数中偶数的和#方法一s=0foriinrange(101):ifi%2==0:s=s+iprint(s)#方法二a=[]foriinrange(101):ifi%2==0:a.append(i)print(sum(a)) ......
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-22-处理select下拉框-上篇
    1.简介在实际自动化测试过程中,我们也避免不了会遇到下拉框选择的测试,因此宏哥在这里直接分享和介绍一下,希望小伙伴或者童鞋们在以后工作中遇到可以有所帮助。今天,我们讲下playwright的下拉框怎么处理,在使用selenium定位的过程中,我们可以选择使用selenium的Select类定位操作选择框......
  • Python概述
    1.1Python简介Python的英文原意为“蟒蛇”,它的诞生是极具戏剧性的。据荷兰人GuidovanRossum(简称Guido)的白述记栽,Python语言是他在圣诞节期间为了打发时间开发出来的。之所以选择Python作为该编程语言的名字,是因为他是一个名为MontyPython的戏剧团体的忠实粉丝。从整体上看,P......
  • 解决pycharm中Python console显示中文乱码
    找了很多方法,以下方法解决了问题:第一步:file—settings,在搜索框搜索console,找到Pythonconsole第二步:在右侧Environmentvariables一栏输入PYTHONIOENCODING=UTF-8第三步:在最下面的Startingscript里,最后添加一行代码:importos;os.system('chcp65001')第四部:重启pythonco......
  • 【Python】基于非侵入式负荷检测与分解的电力数据挖掘
    前言本案例将根据已收集到的电力数据,深度挖掘各电力设备的电流、电压和功率等情况,分析各电力设备的实际用电量,进而为电力公司制定电能能源策略提供一定的参考依据。更多详细内容请参考《Python数据挖掘:入门进阶与实用案例分析》一书。一、案例背景为了更好地监测用电设备的能耗......
  • 华为云耀云服务器L实例:初级篇-conda与python环境配置
     华为云耀云服务器L实例是一款可快速部署且易于运维的轻量级云服务器,专为中小企业和入门级开发者打造。它不仅拥有华为云擎天架构的强大性能,还具有多项用户体验优化方案,让用户轻松上手,享受简单上云的乐趣。本产品网址为:https://www.huaweicloud.com/product/hecs-light.html......