使用默认参数测试函数

问题描述 投票:0回答:1

假设我想测试这个功能:

def get_user(user_id, adults_only=False):
    pass

未显示实现的地方。

我想使用参数化扩展来测试它,如下所示:

@paramaterized.expand([(True, "none"),(False, "child")])
def test_get_child(self, adults_only, expected):
    child = self.child
    actual = get_user(child.id, adults_only)
    assert expected == actual

但是,我没有测试默认参数。并且必须添加第二个测试来测试这一点:

def test_get_child_default(self):
    child = self.child
    actual = get_user(child.id)
    assert "child" == actual

如果能够将这两个测试合二为一就好了。是否可以使用 python 和unittest框架来做到这一点?

python python-unittest
1个回答
0
投票

我猜这个额外测试的原因是为了确保默认值不会改变...... 据我所知,没有直接支持这一点,但你可以自己处理。你可以做这样的事情(诚然不是很好):

@paramaterized.expand([(True, "none"), (False, "child"), (None, "child")])
def test_get_child(self, adults_only, expected):
    child = self.child
    kwargs = {"adults_only": adults_only} if adults_only is not None else {}
    actual = get_user(child.id, **kwargs)
    assert expected == actual

基本上,您使用哨兵值(无)作为默认参数,并相应地自行构造 kwargs。

© www.soinside.com 2019 - 2024. All rights reserved.