我正在用 pytest 測驗我的代碼,并試圖找出測驗我的班級方法之一的最直接方法。
我有一個像這樣的課程:
class MyClass():
def __init__(self, stuff):
...
..
..
def _method_of_interest(self, list1, list2):
..some logic that depends on list1, list2, and self.relevant_info
return output
我想將該方法_method_of_interest作為一些 list1、list2 和 self.relevant_info 組合的函式進行測驗。我寧愿不必實體化 MyClass 的真實物件,因為在邏輯鏈的其他地方存在一些耗時的計算,而且我無法輕松創建具有self.relevant_info我想要測驗的全部值范圍的物件。
對我來說,使用不同的 list1、list2 和 self.relevant_info 值測驗此方法的輸出的最簡潔方法是什么?
具體來說,我們可以假設_method_of_interest是這樣的:
def _method_of_interest(list1, list2):
return list1 list2 list(self.relevant_info)
其中 self.relevant_info 是一個 python set() 物件。
任何指標?網上有很多關于模擬、修補等的內容,但這些示例看起來都比我的情況復雜,而且解決問題的各種方法讓我不確定哪種方法最干凈。
uj5u.com熱心網友回復:
如果你想測驗一個與類的其余部分完全隔離的方法,你總是可以傳遞一個 mock self:
# code under test
class MyClass():
def __init__(self):
raise NotImplementedError # don't instantiate me!
def _method_of_interest(self, list1, list2):
return list1 list2 list(self.relevant_info)
# test
from unittest.mock import Mock
def test_method_of_interest():
assert MyClass._method_of_interest(
Mock(relevant_info=[3]), [1], [2]
) == [1, 2, 3]
如果您運行測驗,您會看到它通過了,并且MyClass永遠不會被實體化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/443035.html
標籤:Python python-3.x 嘲弄 pytest 修补
上一篇:使用Python檢查FireBase資料庫中是否存在特定值
下一篇:從二維陣列調整串列大小
