首页 > 解决方案 > pytest requests_mock 不适用于产量

问题描述

我正在尝试测试旧代码,但遇到了 pytest 的 requests_mock 的问题。例子:

import types
import requests_mock
import requests


def gen_yield():
    data = requests.get('http://tobemocked').json()

    for i in data:
        yield i


def test_gen_yield():
    with requests_mock.Mocker() as m:
        m.get(requests_mock.ANY, json=[1, 2])

        result = gen_yield()
    
    assert isinstance(result, types.GeneratorType)
    assert next(result) == 1

此示例将崩溃,因为模拟不起作用,但在将此代码更改为:

def gen_yield():
    data = requests.get('http://tobemocked').json()

    for i in data:
        return i


def test_gen_yield():
    with requests_mock.Mocker() as m:
        m.get(requests_mock.ANY, json=[1, 2])

        result = gen_yield()
    
    assert result == 1

测试通过。这是故意的吗?也许我对 ing 有误解,yield或者应该以不同的方式处理这个测试用例。

标签: pythonpython-requestsmockingpytestrequests-mock

解决方案


推荐阅读