我試圖使用修補程序從方法內返回模擬。基本結構如下:模擬修補程序在__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,這並不是什麼大問題),並且我想表明我明白了我需要做的基本原則。感謝您的回覆。 –