[英]Mock a method of a mocked object in Python?
我正在使用unittest.mock
庫為Python 3.4編寫的項目編寫單元測試。 我正在測試的函數包含對函數的調用
versions = get_all_versions(some_argument)
我用一個返回列表的MagicMock
對象修補了,所以該version
成為版本號列表,一切正常。
現在,我正在測試的代碼已經改變了一些,看起來像
versions = get_all_versions(some_argument).order_by(another_argument)
現在我需要order_by
方法返回相同的版本號列表,而get_all_versions
應該保持get_all_versions
,我在實現這一點時遇到了一些問題。
我試過修補它
get_all_versions = MagickMock() get_all_versions.order_by = version_list
但這不起作用,我想這是因為order_by
是一個方法而不是一個屬性。 我也試過了
get_all_versions = MagicMock() get_all_versions.order_by = MagicMock(return_value=version_list)
(更加拼命)
get_all_versions = MagicMock(return_value=MagicMock(return_value=version_list))
但這兩個都不起作用。
如何模擬返回對象的函數,然后模擬該對象的方法以使其返回列表?
你想要的是讓get_all_versions
返回一個對象,該對象具有返回version_list
的方法order_by
:
get_all_versions = MagicMock()
get_all_versions.return_value.order_by.return_value = version_list
要解釋為什么您的嘗試不起作用,您的第一次嘗試將使用值version_list
替換方法order_by
:
get_all_versions = MagicMock()
get_all_versions.order_by = version_list
結果大致如下:
get_all_versions.order_by == version_list
第二次嘗試用看起來像函數的東西替換get_all_versions
的返回值並返回version_list
:
get_all_versions = MagicMock(return_value=MagicMock(return_value=version_list))
這導致:
get_all_versions(some_argument)(another_argument) == version_list
我希望這能解決問題!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.