![](/img/trans.png)
[英]What is the difference between mocking with @patch() with and without side_effect?
[英]Difference between side_effect within function vs side_effect in decorator
在裝飾器中傳遞 side_effect 與在 function 中設置有什么區別? 我什么時候應該使用其中一種?
@patch(“my_class.Order.get_order”, side_effect=“mock_order”)
def test_order(self, mock_order):
這是我使用它的另一種方式
@patch(“my_class.Order.get_order”)
def test_order(self, mock_order):
mock_order.side_effect = self.mock_order
除了設置副作用的時間外,沒有任何區別。
在您的示例中,在測試 function 開始時設置了副作用,這兩個變體在語義上是可互換的,使用哪個是一個品味問題(我會說裝飾器最好地表明它是針對整個測試,但如果裝飾器表達式太長,也會考慮可讀性)。
原則上,應用副作用時存在差異,因為裝飾器在加載時創建修補的 object,而在測試中分配副作用僅在運行時分配。 盡管據我所知,這不會影響測試功能。
僅當在第一種方法中使用全局已知變量或 function 作為副作用時才如此,因為 class 本身尚未定義,並且在加載時不存在 class 實例。 如果您想使用 class 本身的屬性或方法,則根本只有第二個變體有效。 任何依賴於測試 class 本身的副作用都不起作用。
如果您只想在測試后期設置副作用,或者想在測試期間更改它,顯然只能使用第二個變體。
總結一下:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.