在pytest中使用参数化关键字参数

时间:2014-05-02 00:17:34

标签: python pytest

我正在学习pytest,我试图将pytest.mark.parametrize用于关键字参数。

这是没有pytest.mark.parametrize的简单示例:

G = 10
H = 2

def f(g=G, h=H):
    return 5 * g + h

def test_f1():
    assert f(h=4) == 54
    assert f(g=20) == 102

这是我使用pytest.mark.parametrize的不成功路径之一。它没有用,但它有助于理解我想要实现的目标:

import pytest

G = 10
H = 2

def f(g=G, h=H):
    return 5 * g + h  

@pytest.mark.parametrize("arg, expected", [
    ("h=4", 54),
    ("g=20", 102),
    ])

def test_f2(arg, expected):
    assert f(eval(arg)) == expected

2 个答案:

答案 0 :(得分:10)

函数f接受关键字参数,因此您需要将测试参数分配给关键字。幸运的是,Python提供了一种非常方便的方法来将关键字参数传递给函数...字典:

d = {'h': 4}
f(**d)

**之前的d前缀将"解包"字典,将每个键/值对作为关键字参数传递给函数。

对于您的pytest示例,这意味着您只需要使用字典替换字符串参数,并使用关键字unpacker替换eval中的test_f2

@pytest.mark.parametrize("arg,expected", [
    ({'h':4}, 54),
    ({'g':20}, 102),
    ])

def test_f2(arg, expected):
    assert f(**arg) == expected

答案 1 :(得分:0)

扩展Matthew的答案,同时喂养arg和kwarg:

Typescript