Python Mock
Mock
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