簡體   English   中英

在Python中模擬一個模擬對象的方法?

[英]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.

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