我试图使用修补程序从方法内返回模拟。基本结构如下:模拟修补程序在__init__.py中无法使用类
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文件中定义的。我不确定这是否有所作为?有没有看过这个?
注:实际LIB是twilio 3.3.5,我使用Python 2.6.5和1.3.1的Django和Mock 0.7.2
您可能需要发布不工作的代码,而不是代码。 –
@DanielRoseman非常有效的一点。我使用这种方法的原因是,我认为很少有人会拥有twilio软件包,并且可能不想安装它(尽管如果您使用的是virtualenv,这并不是什么大问题),并且我想表明我明白了我需要做的基本原则。感谢您的回复。 –