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 '''