我正在尝试测试旧代码,但遇到了 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
或者应该以不同的方式处理这个测试用例。