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'

 测试结果如下:

posted @ 2019-08-24 16:11  r0xFED  阅读(2089)  评论(0编辑  收藏  举报