Mock 可以模拟函数的返回值,方便在测试时可以模拟出各种情景

基础用法

mock 可以通过指定返回值的方式模拟一个函数
示例:

import unittest
from unittest import mock


class Foo:
    def bar(self):
    	# 不会实际调用
        pass


class TestFoo(unittest.TestCase):
    def test_bar(self):
        foo = Foo()
        # 指定函数返回值
        foo.bar = mock.Mock(return_value=1)
        result = foo.bar()
        self.assertEqual(result, 1)


unittest.main()

在函数可以使用时,通过 side_effect 指定函数

示例:

import unittest
from unittest import mock


class Foo:
    def bar(self):
        return 2


class TestFoo(unittest.TestCase):
    def test_bar(self):
        foo = Foo()
        # 指定函数返回值
        foo.bar = mock.Mock(return_value=1, side_effect=foo.bar)
        result = foo.bar()
        self.assertEqual(result, 2)


unittest.main()

side_effect 可以指定一个可迭代对象,每次调用该方法就会返回不一样的值,当对象的值循环完之后就会报错

示例:

import unittest
from unittest import mock


class Foo:
    def bar(self):
        return 2


class TestFoo(unittest.TestCase):
    def test_bar(self):
        foo = Foo()
        # 指定函数返回值
        foo.bar = mock.Mock(side_effect=[1, 2, 3])
        for i in range(3):
            print(foo.bar())


unittest.main()

输出结果:

1
2
3

分类:

技术点:

相关文章: