整篇内容是从测码课堂里学习并总结出来的笔记,想要具体学习的可以去b站搜索测码课堂相关课程。
在进行单元测试时,我们常常需要对不同模块功能进行联调测试,而如果其中一种功能的未完成而影响其他功能测试,这样就会拖延测试进度,因此需要一种方法来解决这个问题。
在测试中,mock是单元测试中的一种模拟行为,通过mock可以对未完成的功能进行模拟返回值,从而不影响其他功能的测试。
此处以计算器加法功能为一个例子
代码(Api_demo.py)如下:
# 计算器类
class Count():
# 未完成的加法逻辑
def add(self):
pass
Python3中mock集成在unittest中,无需额外安装
代码(mock_example.py)如下:
from unittest import mock
from Api_demo import Count
import unittest
class TestCount(unittest.TestCase):
def test_add(self):
# 被测试类实例化
count = Count()
# 使用mock模拟add函数返回值,如果函数功能开发完成,side_effect将会取实际值覆盖模拟值
count.add = mock.Mock(return_value=16,side_effect=count.add)
# 真实结果,无视传参
result = count.add(7, 5)
# 真实结果预期等于模拟结果
self.assertEqual(result, 16)
if __name__ == '__main__':
unittest.main()
当功能之间相互关联,在运行测试用例时,其中一个模块的改变会导致其他功能用例不通过,但是其他功能是正常的,不应该测试不通过,因此要解决测试依赖这个问题。
1、定义两个相关联的功能,此处以加法和乘法为例子创建函数,代码(function.py)如下:
# 加法和乘法功能
def A_function(a, b):
sum = a + b
#调用B_function
multip = B_function(a, b)
return sum, multip
# 乘法功能(未完成)
def B_function(a, b):
pass
2、在测试用例中的使用,代码(test_case.py)如下:
import unittest
from unittest.mock import patch
import function
class MockTest(unittest.TestCase):
# @patch可以将指定类和对象在模块中进行测试
@patch('function.B_function')
def test_A_and_B(self, multip_functon):
x = 4
y = 6
# 模拟乘法功能返回值
multip_functon.return_value = 24
sum, multip = function.A_function(x, y)
# 用来判断未开发的功能传参是否正确
multip_functon.assert_called_once_with(4, 6)
self.assertEqual(sum, 10)
self.assertEqual(multip, 24)
if __name__ == '__main__':
unittest.main()
以上就是今天要讲的内容,本文仅仅简单介绍了mock的使用,使我们只要知道正常功能会返回的数据,就可以模拟该数据,从而达到测试目的,不影响测试进度。