mock的使用-解決接口依賴問題

參考:https://www.jianshu.com/p/15594044ab27函數

pip install mock
pip install pytest-mock   (至關於mock的升級版)

舉例:測試

# 文件路徑:common/mock_demo.py
import requests


def mock_request(url):
    """須要被mock的請求"""
    return requests.get(url).status_code


def invoke_mock_request(url):
    return mock_request(url)

 測試用例url

import mock
from pytest_mock import mocker
from common.mock_demo import invoke_mock_request


def test_mock_1(mocker):
    """方法一:使用的是pytest-mock 中的mocker"""
    mocker.patch("common.mock_demo.mock_request", return_value=300)    # 被mock請求函數的路徑必定要寫對
    assert invoke_mock_request("https://www.baidu.com/") == 300


def test_mock_2():
    """方法二:使用的 mock 中patch方法"""
    with mock.patch("common.mock_demo.mock_request", return_value=300) as foo:
        assert invoke_mock_request("https://www.baidu.com/") == foo.return_value


@mock.patch("common.mock_demo.mock_request", return_value=300)
def test_mock_3(mock_request):
    """方法三:使用的裝飾器的方式對mock對象的函數返回值進行替換"""
    assert invoke_mock_request("https://www.baidu.com/") == mock_request.return_value

即:在調用 invoke_mock_request() 以前先對其接口依賴的 mock_request() 方法的返回值能夠替換,這樣的話無論其方法的返回值如何變化,咱們只須要關注這次 mock 便可spa

相關文章
相關標籤/搜索