簡體   English   中英

如何模擬和單元測試以下代碼?

[英]How do I mock and unit test the following code?

import module
from x import X

class A:
   def method(): 
       return module.something(arg=X())

我創建了以下內容進行單元測試:

with patch('filename.module.something') as something_mock:
   with patch('filename.X'): as x_mock:
       a.method()
something_mock.assert_called_once_with(arg=x_mock.return_value)
x_mock.assert_called_once_with()

有人提到無需解釋就無需模擬filenme.X 還有其他方法可以在不模擬filename.X情況下驗證對something的調用嗎? 我將如何更改以下斷言來驗證呼叫?

something_mock.assert_called_once_with(arg=_____) 

如果create X不是問題(即數據庫連接或網絡訪問),則可以進行測試而無需模擬它。

您有以下選擇:

  1. 如果您不想檢查方法如何調用something_mock ,請使用mockcalled屬性
  2. 如果您想檢查arg關鍵字arg是否調用了something_mock ,但是對值是什么不感興趣,請使用mock.ANY
  3. 使用call_args提取something_mock調用參數,並通過調用作為元組提取arg

第一個是

assert something_mock.called

第二個是

something_mock.assert_called_once_with(arg=mock.ANY)

最后第三個是

args, kwargs = something_mock.call_args
assert isinstance(kwarg['arg'], x.X)

最后一個選項與模擬X完全相同,但我寫它只是為了顯示所有可能性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM