在進行單元測試的時候,有時候會遇到這種情況:
出於某些原因,我們不想測試某一部分內容,但是我們想要測試的部分卻依賴這部分內容。
這時候,可以使用mock模塊來模擬調用這部分內容,並給出返回結果,舉例如下:
比如我們不想測試類C中的函數a,只想得到一個返回結果,可以這么寫:
#從Python 3.3 開始,mock被整合到了unittest中
#此時使用 from unittest import mock 引入mock模塊
#python 3.3 之前使用 import mock
from mock import patch import unittest class TestXXX(unites.TestCase) @patch.object(C, 'a')
# or: @patch('C.a') def test_xxx(self, Ca): Ca.return_value = 20 ......
這樣在測試中調用C類中的a函數將直接返回20
以下方式也能實現目的:
... def test_xxx(self): c = C() c.a = mock.Mock(return_value = 20) ......
以上模擬的是類中的函數,也可以使用Mock來模擬普通函數:
from mock import Mock mfunc = Mock() mfunc.return_value = 3 mfunc() #3
也可以使用參數調用,並assert參數:
mfunc(1, 'a') # 3 mfunc.assert_called_with(1, 'a') #assert that calls are made in a particular way
http://cizixs.com/2015/05/28/python-mock-usage