gpt4 book ai didi

python - 使用来自通用测试功能的 pytest fixture

转载 作者:行者123 更新时间:2023-12-04 16:45:09 25 4
gpt4 key购买 nike

我有一些 unittest基于 currently looks like this 的代码:

class TestMain(TestCase):
def run_prog(self, args):
with TemporaryFile() as stdout:
old_stdout = sys.stdout
try:
main.main()
stdout.seek(0)
stdout_data = stdout.read()
finally:
sys.stdout = old_stdout
return stdout_data

def test_one(self):
out = self.run_prog(...)

def test_two(self):
out = self.run_prog(...)

def test_three(self):
out = self.run_prog(...)
run_prog调用被测“主”程序并手动捕获其标准输出。
我正在将此项目转换为 pytest ,但这最后一部分已经突破了我对 pytest 固定装置的理解的极限。
我知道 pytest 完全支持 capturing stdout/stderr我想利用这一点。
问题是,他们的示例在测试功能级别上工作:
def test_myoutput(capfd):
do_something
captured = capsys.readouterr()
assert captured.out == "hello\n"
assert captured.err == "world\n"
就我而言, run_prog使用了 42 次,所以我尝试使用从 run_prog 开始的 fixture -- 理想情况下,调用函数不需要担心 capsys/ capfd .
有没有办法从我的 run_prog 中“调用” fixture helper ?或者我需要添加 capfd所有 42 个测试并将其传递给 run_prog ?

最佳答案

您可以定义一个 autouse fixture 来存储 CaptureFixture对象(由 capsys 固定装置返回)作为实例属性:

class TestMain(TestCase):

@pytest.fixture(autouse=True)
def inject_capsys(self, capsys):
self._capsys = capsys

def run_prog(self, args):
main.main()
return self._capsys.out

def test_out(self):
assert self.run_prog('spam') == 'eggs'
TestMain.inject_capsys每次测试都会重新运行 fixture ,以保证测试隔离( test_one 的输出不会泄漏到 test_two 等中)。

关于python - 使用来自通用测试功能的 pytest fixture ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63441978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com