我会先发布一些代码,以便更清楚。
我的课程:
from tools import get_knife, sharpen
class Banana(object):
def chop(self):
knife = get_knife()
sharpen(knife)
我的测试:
from mock import patch, sentinel
from banana import Banana
class TestBanana(unittest.TestCase):
@patch('banana.get_knife')
@patch('banana.sharpen')
def test_chop(self, get_knife_mock, sharpen_mock):
get_knife_mock.return_value = sentinel.knife
Banana().chop()
sharpen_mock.assert_called_with(sentinel.knife)
此测试将失败,因为没有使用get_knife_mock的return_value调用sharpen_mock。
答案 0 :(得分:4)
请注意,装饰器从底部向上应用。这是Python应用装饰器的标准方式。传递给测试函数的创建的模拟的顺序与此顺序匹配。
http://www.voidspace.org.uk/python/mock/patch.html#nesting-patch-decorators