Pytest - 如何在测试时传递默认值
Pytest - How to pass defaults while testing
假设我有一个函数如下
def add_vals(a, b=1, c=2):
result = a + b + c
return result
设测试数据如下
test_data = [(1, 2, 3), (6),
(2, ,4), (7)
]
对于第二个测试,我希望函数使用 b
的默认值,即 b=1
我该怎么做?
为了测试我正在使用以下函数。
@pytest.mark.parametrize("inp,expected", testdata)
def test_add_vals(inp, expected):
res = historical_returns(*inp)
assert res == expected
编辑
基于使用 **kwargs
传递默认参数的建议。有语法问题无法找出错误。下面是代码
def add_vals(a, b=1, c=2):
result = a + b + c
return result
testdata = [(1, 'b'=9, 12),
(2, 'c'=5, 8)
]
@pytest.mark.parametrize("args, kwargs, expected", testdata)
def test_add_vals(args, kwargs, expected):
for key, value in kwargs.items():
res = add_vals(*args, key=value)
assert res == expected
错误如下
E testdata = [((1), ('b' = 1), (6)),
E ^
E SyntaxError: invalid syntax
正如所建议的那样,您可以使用列表或参数 (args
) 和关键字参数字典 (kwargs
) 的组合,如下所示:
import pytest
def add_vals(a, b=1, c=2):
result = a + b + c
return result
testdata = [([1], {"b": 9}, 12),
([2], {"c": 5}, 8),
([0, 1, 2], {}, 3),
([], {"c": 3, "b": -3, "a": 0}, 0)
]
@pytest.mark.parametrize("args, kwargs, expected", testdata)
def test_add_vals(args, kwargs, expected):
res = add_vals(*args, **kwargs)
assert res == expected
进一步阅读:https://book.pythontips.com/en/latest/args_and_kwargs.html
假设我有一个函数如下
def add_vals(a, b=1, c=2):
result = a + b + c
return result
设测试数据如下
test_data = [(1, 2, 3), (6),
(2, ,4), (7)
]
对于第二个测试,我希望函数使用 b
的默认值,即 b=1
我该怎么做?
为了测试我正在使用以下函数。
@pytest.mark.parametrize("inp,expected", testdata)
def test_add_vals(inp, expected):
res = historical_returns(*inp)
assert res == expected
编辑
基于使用 **kwargs
传递默认参数的建议。有语法问题无法找出错误。下面是代码
def add_vals(a, b=1, c=2):
result = a + b + c
return result
testdata = [(1, 'b'=9, 12),
(2, 'c'=5, 8)
]
@pytest.mark.parametrize("args, kwargs, expected", testdata)
def test_add_vals(args, kwargs, expected):
for key, value in kwargs.items():
res = add_vals(*args, key=value)
assert res == expected
错误如下
E testdata = [((1), ('b' = 1), (6)),
E ^
E SyntaxError: invalid syntax
正如所建议的那样,您可以使用列表或参数 (args
) 和关键字参数字典 (kwargs
) 的组合,如下所示:
import pytest
def add_vals(a, b=1, c=2):
result = a + b + c
return result
testdata = [([1], {"b": 9}, 12),
([2], {"c": 5}, 8),
([0, 1, 2], {}, 3),
([], {"c": 3, "b": -3, "a": 0}, 0)
]
@pytest.mark.parametrize("args, kwargs, expected", testdata)
def test_add_vals(args, kwargs, expected):
res = add_vals(*args, **kwargs)
assert res == expected
进一步阅读:https://book.pythontips.com/en/latest/args_and_kwargs.html