Python unittest模塊的使用筆記:對mock.patch()的被mock函數的說明


       現在假設需要對get_app模塊內的create_app函數做單元測試,同時create_app函數調用了另一模塊utils的load_yaml函數。由於模塊utils的load_yaml函數可能處於開發階段或是需要通過網絡傳輸數據,從而導致測試的不便。這時就需要對load_yaml做一個mock.patch,即偽造一個load_yaml的返回值來完成對其調用者的單元測試。

        這里的關鍵在於mock.patch()中load_yaml的路徑寫法:從調用者(create_app)路徑引入load_yaml而不是直接從load_yaml自身所在的模塊路徑引入。

        演示文件共3個,均位於同一目錄下。

        i) test_get_app.py

from unittest import TestCase, mock
import unittest
from get_app import create_app

test_config = 'HHH'

class GetappTestCase(TestCase):

    @mock.patch('get_app.load_yaml')   # 注意這里的mock路徑
    def test_get_app(self, mock_load):
        mock_load.return_value = test_config
        self.assertEqual(create_app(), 'HHH')

if __name__ == '__main__':
    unittest.main()

         ii) get_app.py

from utils import load_yaml

def create_app():
    ret = load_yaml()
    return ret

         iii) utils.py

def load_yaml():
    return 'This is a config'

 測試結果如下:


免責聲明!

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



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