我有一個模塊,我在我的函式之外實體化一個物件,所以我可以重用它:
from somewhere import client
client_obj = client()
def function_with_client1():
client_obj.foo1()
def function_with_client2()
client_obj.foo2()
我想修補這個客戶端一次,以便在我的測驗中我可以在多個測驗中重用它,如下所示:
from unittest.mock import patch
from above import client, function_with_client1, function_with_client2
mocked_client = patch('above.client') #this doesn't work
def test_function_with_client1():
function_with_client1()
def test_function_with_client2():
function_with_client2()
上面的補丁不起作用,它使用真實的物件實體運行測驗。我怎樣才能在我的測驗檔案中正確地修補它一次,以便測驗在所有測驗中重復使用它?我知道我可以用補丁裝飾每個測驗,但是我想像在真實模塊中一樣重用相同的補丁物件
uj5u.com熱心網友回復:
修補全域物件總是一個問題,因為它們是在修補之前初始化的。這可以通過在修補后重新加載模塊來解決,但更好的解決方案是不進行全域初始化。
您可以使用某種延遲初始化,一個簡單的實作將是這樣的:
from somewhere import client
client_obj = None
def get_client():
global client_obj
if not client_obj:
client_obj = client()
return client_obj
def function_with_client1():
get_client().foo1()
...
匯入模塊時不會呼叫Now client(),您可以在測驗中模擬它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/457269.html
上一篇:@Cacheable測驗方法
下一篇:Vue計算的JEST單元測驗
