mock的官網學習備忘錄:官網地址https://docs.python.org/3/library/unittest.mock.html#quick-guide
1,安裝
python3 unittest內置了mock,直接from unittest import mock就可以
2,簡介
用mock 可以對依賴組件進行模擬並替換掉, 從而不影響本次測試,不需要關心和本次功能無關的其他外在條件
可以配置它們,指定返回值或限制哪些屬性可用,然后斷言它們是如何被使用的
3快速開始
#patch的用法, from unittest.mock import patch def f1(): return 'f1' def f2(): return 'f2' class Testf(unittest.TestCase): #這里直接寫patch(f1)會報錯,因為官方格式必須是@patch('module.ClassName2') """ target, attribute = target.rsplit('.', 1) ValueError: not enough values to unpack (expected 2, got 1) During handling of the above exception, another exception occurred: TypeError: Need a valid target to patch. You supplied: 'f1' """ #因為就是這個文件里的,所以就寫上當前文件的名字就可以額 #@unittest.mock.patch("mock_learn.f1") @unittest.mock.patch("f1") def test_f2(self,fun): #因為patch了f1,所以下面的fun指的就是f1了 fun.return_value='sb' #print (f1()) #f1 print (f2()) #f2 if __name__=="__main__": unittest.main() #方法在文件里 ''' from unittest.mock import patch import test3 class TestCount(unittest.TestCase): @unittest.mock.patch("test3.fun1") def test_fun2(self,fun): fun.return_value='sb' ff=test3.fun2() fun.assert_called_once_with() print (ff) if __name__=="__main__": unittest.main() #sbfun2 ''' #class在文件test3.py中 ''' from unittest.mock import patch import test3 class TestCount(unittest.TestCase): @unittest.mock.patch("test3.Over.f1") def test_f2(self,fun): fun.return_value='sb' over=test3.Over() ff=over.f2() #fun.assert_called_once_with() #因為沒調用f1,所以這個斷言報錯Expected 'f1' to be called once. Called 0 times print (ff) if __name__=="__main__": unittest.main() #f2 '''