def test3(self): x = 1 p = patch('mymodule.func') mock_func = p.start() mymodule.func(x) mock_func.assert_called_with(x) p.stop()
问题 你写的单元测试中需要给指定的对象打补丁,用来断言它们在测试中的期望行为 (比如,断言被调用时的参数个数,访问指定的属性等)。 解决方案 unittest.mock.patch() 函数可被用来解决这个问题。 patch() 还可被用作一个 装饰器、上下文管理器或单独使用,尽管并不常见。 """ import unittest from unittest.mock import patch import mymodule with patch('mymodule.func') as mock_func: res = mymodule.func(42) mock_func.assert_called_with(42) sample_data = { 'IBM': 91.1, 'AA': 13.25, 'MSFT': 27.72 } class Tests(unittest.TestCase): @patch('mymodule.dow_prices', return_value=sample_data) def test_dow_prices(self, mock_urlopen): p = mymodule.dow_prices()
def test_import(): import mymodule mymodule.x # $tracked y = mymodule.func() # $tracked y # $tracked mymodule.z # $tracked
# option 1 ################## from mymodule import func func() ############################# # option 2 ################## # import mymodule # mymodule.func() ############################# # option 3 ################## # from mymodule import * # func() #############################
import mymodule as mm #Alternative #from mymodule import func, version #from mymodule import * mm.func(3) mm.func(4) print 'Version of mm(mymodule):', mm.version
def test2(self): x = 1 with patch('mymodule.func') as mock_func: mymodule.func(x) mock_func.assert_called_with(x)
def test1(self, mock_func): x = 1 mymodule.func(x) mock_func.assert_called_with(x)