Tôi đang cố gắng sử dụng bản vá để trả về một Mô hình từ bên trong một phương thức. Cấu trúc cơ bản như sau:Bản vá giả không hoạt động với lớp học trong __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()
Đoạn mã trên hoạt động tốt cho tôi. Tuy nhiên, khi tôi áp dụng cùng một mẫu cho mã thực mà tôi đang thử nghiệm, đối tượng thực sự (không phải đối tượng giả) được trả về trong phương thức đang được thử nghiệm. Tôi không thể thấy bất kỳ sự khác biệt nào. Chỉ nghĩ rằng có một chút khác biệt là lớp thực được xác định trong tệp init .py. Tôi không chắc liệu điều này có tạo nên sự khác biệt hay không? Có ai thấy điều này trước đây không?
Lưu ý: các lib thực tế là twilio 3.3.5 và tôi đang sử dụng Python 2.6.5 và 1.3.1 Django và Mock 0.7.2
Bạn có thể cần đăng mã không hoạt động, thay vì mã. –
@DanielRoseman rất hợp lệ. Lý do mà tôi sử dụng phương pháp này là tôi thấy rất ít người sẽ có gói twilio và có thể không muốn cài đặt nó (mặc dù đây không phải là vấn đề lớn nếu bạn đang sử dụng virtualenv), và tôi muốn chứng minh rằng tôi đã hiểu nguyên tắc cơ bản của những gì tôi cần làm. Cảm ơn vì đã trả lời. –