Python là một ngôn ngữ tương đối mới đối với tôi. Đơn vị kiểm tra và phụ thuộc Injection là một cái gì đó mà tôi đã làm cho một thời gian ngắn, vì vậy tôi quen thuộc với nó từ một C# phối cảnh.Cách thực hiện tiêm phụ thuộc cơ bản bằng Python (cho mục đích chế nhạo/thử nghiệm)
Gần đây, tôi đã viết đoạn mã này Python:
import requests # my dependency: http://docs.python-requests.org/en/latest/
class someClass:
def __init__(self):
pass
def __do(self, url, datagram):
return requests.post(self, url, datagram)
Và sau đó tôi nhận ra rằng tôi đã vừa tạo ra một sự phụ thuộc mã hóa cứng. Bleh.
tôi đã coi việc thay đổi mã của tôi để làm "Constructor" Dependency Injection:
def __init__(self,requestLib=requests):
self.__request = requestLib
def __do(self, url, datagram):
return self.__request.post(self, url, datagram)
này bây giờ cho phép tôi để tiêm một/phụ thuộc mô hình giả vì lợi ích của đơn vị kiểm tra, nhưng không chắc chắn nếu điều này được coi là Python-ic. Vì vậy, tôi đang lôi cuốn cộng đồng Python để được hướng dẫn.
Một số ví dụ về cách thức Python-ic để thực hiện DI cơ bản (chủ yếu là vì viết bài kiểm tra đơn vị sử dụng Mocks/Fakes)?
PHỤ LỤC Đối với bất cứ ai tò mò về câu trả lời Mock, tôi quyết định đặt một câu hỏi riêng biệt ở đây: How does @mock.patch know which parameter to use for each mock object?
Lưu ý rằng '__leading_double_underscore' gọi tên mangling, và nói chung nên tránh. Sẽ không dễ dàng hơn khi ['giả 'ra' yêu cầu'] (https://docs.python.org/3/library/unittest.mock.html) cho mô-đun được thử nghiệm hơn là tiêm nó? – jonrsharpe
Tôi đọc rằng dấu gạch dưới kép __leading là để đánh dấu một phương thức riêng tư. Tôi đã nhầm? Nếu vậy, làm thế nào tôi nên đánh dấu một cái gì đó riêng tư? – Pretzel
Nó sẽ dễ dàng hơn để mô phỏng các yêu cầu cho mô-đun hơn là tiêm nó? Tôi không biết. Tôi không quen với cách thức làm việc của Python, đó là lý do tại sao tôi hỏi. ;) – Pretzel