单元测试中mock的简易使用

文章目录

  • 前言
  • 一、mock是什么?
  • 二、例子
    • 1.未开发完成的功能
    • 2.使用mock模拟未完成的功能
    • 3.应用---解决测试依赖
  • 总结


整篇内容是从测码课堂里学习并总结出来的笔记,想要具体学习的可以去b站搜索测码课堂相关课程。

前言

在进行单元测试时,我们常常需要对不同模块功能进行联调测试,而如果其中一种功能的未完成而影响其他功能测试,这样就会拖延测试进度,因此需要一种方法来解决这个问题。


一、mock是什么?

在测试中,mock是单元测试中的一种模拟行为,通过mock可以对未完成的功能进行模拟返回值,从而不影响其他功能的测试。

二、例子

1.未开发完成的功能

此处以计算器加法功能为一个例子
代码(Api_demo.py)如下:

# 计算器类
class Count():
    # 未完成的加法逻辑
    def add(self):
        pass

2.使用mock模拟未完成的功能

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()

3.应用—解决测试依赖

当功能之间相互关联,在运行测试用例时,其中一个模块的改变会导致其他功能用例不通过,但是其他功能是正常的,不应该测试不通过,因此要解决测试依赖这个问题。
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的使用,使我们只要知道正常功能会返回的数据,就可以模拟该数据,从而达到测试目的,不影响测试进度。

你可能感兴趣的:(接口测试,单元测试,python)