[翻譯] Python unittest side_effect


原文:https://docs.python.org/3.7/library/unittest.mock.html#unittest.mock.Mock.side_effect

side_effect:

它既可以是一個mock對象被調用時執行的可調用的函數,也可以是一個可迭代對象或者執行時拋出的一個異常(異常類或實例)。

如果side_effect實際指向一個函數,那么當此mock對象被調用時,side_effect會直接傳遞傳入mock的參數給函數並執行之。除非該函數返回unittest.mock.DEFAULT單例對象,否則mock對象返回此函數執行后的返回值。如果該函數返回unittest.mock.DEFAULT,那么mock對象實際的返回結果將與此mock對象的unittest.mock.Mock.return_value返回值一致。

如果side_effect實際指向一個可迭代對象,那么每次調用mock對象均會生成並返回此可迭代對象中單次迭代后的值。可迭代對象中既可以是需要拋出異常實例,或者是需要讓調用mock對象時返回的值(若單次迭代返回值是unittest.mock.DEFAULT,實際返回值與當side_effect指向一個函數時的情況一致)。

例子: 此mock對象會拋出一個異常 (一般用於測試某個API的異常處理流程):

>>> mock = Mock() >>> mock.side_effect = Exception('Boom!') >>> mock() Traceback (most recent call last): ... Exception: Boom! 

使用 side_effect 返回一個序列的每次迭代后的值:

>>> mock = Mock() >>> mock.side_effect = [3, 2, 1] >>> mock(), mock(), mock() (3, 2, 1) 

使用一個可調用對象(函數)作為side_effect的實際指向的對象:

>>> mock = Mock(return_value=3) >>> def side_effect(*args, **kwargs): ... return DEFAULT ... >>> mock.side_effect = side_effect >>> mock() 3 

side_effect 可以在mock對象的構造函數中創建。這里的例子展示了一個在mock對象構造函數中建立的side_effect, 這個side_effect是一個可調用對象,用於接收一個數值然后返回其自身加1的新數值。

>>> side_effect = lambda value: value + 1 >>> mock = Mock(side_effect=side_effect) >>> mock(3) 4 >>> mock(-8) -7 

設置 side_effect 為 None 以取消之前mock對象設置的side_effect:

>>> m = Mock(side_effect=KeyError, return_value=3) >>> m() Traceback (most recent call last): ... KeyError >>> m.side_effect = None >>> m() 3


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM