我在参数化测试中访问装置(在本例中为 capsys)时遇到问题。目前我正在使用一个虚拟夹具来完成这项工作:
import pytest
@pytest.fixture
def params(request):
from collections import namedtuple
return namedtuple('Params', 'input output')(*request.param)
@pytest.mark.parametrize('params', [
('a', '1a\n'),
('b', '1b\n'),
], indirect=True)
def test_output(capsys, params):
print('1' + params.input)
out, err = capsys.readouterr()
assert out == params.output
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有params夹具的情况下重写这段代码?
您可以简单地删除indirect参数:
import pytest
@pytest.mark.parametrize('params', [
('a', '1a\n'),
('b', '1b\n'),
])
def test_output(capsys, params):
inp, expected = params
print('1' + inp)
out, err = capsys.readouterr()
assert out == expected
Run Code Online (Sandbox Code Playgroud)
但更好的方法是parametrize直接通过名称传递参数:
import pytest
@pytest.mark.parametrize('inp, expected', [
('a', '1a\n'),
('b', '1b\n'),
])
def test_output(capsys, inp, expected):
print('1' + inp)
out, err = capsys.readouterr()
assert out == expected
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
226 次 |
| 最近记录: |