![](/img/trans.png)
[英]How to create an instance of another class within a new class at instantiation?
[英]How to create an instance of mocked class within another class
Class A 具有另一個 class B 的屬性。
Class A():
def __init__(self, b):
self.b = b
def get_b_secret(self, job_id):
x, y = self.b.get_secret(job_id)
return x, y
Class B():
def __init__(self, key, url):
self.key = key
self.url = url
def get_secret(job_id):
# logic to get secret
# return a tuple
return x, y
我想通過 mocking B class 為 class A 的方法get_b_secret
編寫一個單元測試作為一個整體。
@patch('b.B')
def test_get_b_secret(self, mock_b):
mock_b.b.get_secret.return_value = ('x', 'y')
obj = A(mock_b)
expected = ('x','y')
self.assertEqual(obj.get_b_secret('001'), expected)
我意識到通過 mocking class B,我並沒有真正將 B 實例化到 A 實例內部的實例。 這就是為什么當我調試測試時, A
的get_b_secret
返回一個MagicMock
object 。
我發現 這篇關於 mocking object 的文章。 但在該示例中,外部類的 init 沒有內部 Class object 作為參數。 所以有點不同。 最好的方法是什么?
如果您的示例代碼是正確的,那么您不需要模擬 class B。您只需在初始化時將帶有 function get_secret 的模擬傳遞到 class A 中。
mock = MagicMock()
mock.return_value.get_secret.return_value = ('x', 'y')
obj = A(mock)
....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.