我正在尝试使用patch来在一个方法中返回Mock对象。基本的结构如下:
MyCode.py
class MyClass:
def __init__(self, first_name, last_name):
self.first = first_name
self.last = last_name
def get_greeting(self):
return 'Hello {f} {l}'.format(f=self.first, l=self.last)
def get_new_greeting(first_name, last_name):
obj = MyClass(first_name, last_name)
return obj.get_greeting()
my_code_test.py
import unittest
from mock import Mock, patch
import my_code
class TestMyCode(unittest.TestCase):
def setUp(self):
pass
@patch('my_code.MyClass')
def test_get_greeting(self, MockClass):
instance = MockClass.return_value
mock_greeting = 'Hello Me'
instance.get_greeting.return_value = mock_greeting
greeting = my_code.get_new_greeting('john', 'doe')
self.assertEqual(greeting, mock_greeting)
if __name__ == '__main__':
unittest.main()
对我来说,上面的代码没问题。但是,当我将相同的模式应用于我尝试测试的真实代码时,被测试的方法返回的是真实对象(而不是模拟对象)。我看不出有任何区别。唯一有点不同的是,真实类是在一个init.py文件中定义的。我不确定这是否有影响?有人见过这种情况吗?
注意:实际库为twilio 3.3.5,我使用的是Python 2.6.5和Django 1.3.1以及Mock 0.7.2。