如何使用 Pytest 对内置的 input
和 print
函数进行猴子补丁,以便在重构之前捕获其他人的代码输出并使用 pytest
进行测试?
例如,我已经获得了类似于以下代码的一些代码:
class QueryProcessor:
def __init__(self ...):
...
def write_search_result(self, was_found):
print('yes' if was_found else 'no')
def read_query(self):
return Query(input().split())
我不想从
stdin
读取数十个输入参数,也不想print
输出。我想使用我编写的函数,这些函数可以筛选包含mytest.in
和mytest.out
文件的目录,并使用@pytest.mark.parametrize(...)
将输入传递给pytest
。但是,我无法弄清楚如何修补该类中笨拙的
read...
和write...
函数。我怀疑应该这样做:
@yptest.mark.parametrize("inputs…, expected outputs…", data_reading_func())
def test_QueryProcessor(monkeypatch, inputs…, expected outputs…):
"""Docstring
"""
q = QueryProcessor()
def my_replacement_read():
...
return [...]
def my_replacement_write():
...
return [...]
monkeypatch.???
assert ...
您好,需要帮忙吗?
非常感谢。