python3 mock

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

 

原文地址:https://www.cnblogs.com/xueli/p/8780476.html