我有一個 Python 類,它需要一些資料才能被初始化。這些資料通常是使用來自另一個模塊的函式獲取的,該函式呼叫 API。我的類的初始化程式采用的引數之一是可用于通過 API 獲取資源的相同 ID。
從初始化程式內部呼叫 API,并獲取它需要的資料將使初始化更短(更清晰?)。但我擔心這會使類更難測驗,并在代碼深處引入依賴關系。
我正在嘗試設計以可維護和可測驗的方式實作這一點的最佳方法。
直接從初始化器內部呼叫 API 模塊,獲取完成初始化所需的資料會不會不好?還是只從外部呼叫 API 并將資料傳遞給初始化程式更好?
uj5u.com熱心網友回復:
“正常”方式(1)是將依賴函式、模塊或類傳遞給建構式本身。
然后,在您的生產代碼中,傳入真實的東西。在您的測驗代碼中,傳入一個虛擬代碼,它的行為將完全符合您對特定測驗用例的期望。
這實際上是您提出的兩件事之間的中間衡量標準。
換句話說,類似:
def do_something_with(something_generator):
something = something_generator.get()
print(something)
# Real code.
do_something_with(ProductionGenerator())
# Test code.
class TestGenerator:
def get(self):
return 42
do_something_with(TestGenerator())
如果您不愿始終傳遞依賴項,則可以使用默認值之類的方法解決此問題,如果未給出,則在函式內創建它:
def do_something(something_generator=None):
if something_generator is None:
local_gen = ProductionGenerator()
else:
local_gen = something_generator
something = something_generator.get()
print(something)
# Real code.
do_something()
# Test code.
class TestGenerator:
def get(self):
return 42
do_something(TestGenerator())
(1)當然,按照我的方式定義:-)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/468156.html
