在進行單元測試的時候,有時候會遇到這種狀況:python
出於某些緣由,咱們不想測試某一部份內容,可是咱們想要測試的部分卻依賴這部份內容。函數
這時候,能夠使用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函數將直接返回20spa
如下方式也能實現目的:code
... def test_xxx(self): c = C() c.a = mock.Mock(return_value = 20) ......
以上模擬的是類中的函數,也能夠使用Mock來模擬普通函數:blog
from mock import Mock mfunc = Mock() mfunc.return_value = 3 mfunc() #3
也能夠使用參數調用,並assert參數:ci
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-usageit