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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM