我用pytest写了一个fixture,它没有参数化,但被很多测试使用。后来我需要参数化这个夹具。
为了不需要mark.parametrize
所有旧的测试,我做了以下几点:
def ldap_con(request):
try:
server_name = request.param
except AttributeError:
server_name = "ldaps://my_default_server"
c = Connection(server_name, use_ssl=True)
yield c
c.unbind()
现在我可以两者兼得了:
def test_old(ldap_con):
run_test_to_default_connection(ldap_con)
@pytest.mark.parametrize('ldap_con', ['mynewserver'], indirect=True)
def test_new(ldap_con):
run_test_to_new_connection(ldap_con)
该解决方案具有几个缺点:
- 我捕获到任意属性错误(可能还有其他错误)
- 它不考虑命名参数
- 读者不清楚是否存在默认值
是否有一个标准的方法来定义夹具参数的默认值?
2条答案
按热度按时间mspsb9vt1#
不如
我们可以两者兼得
at0kjp5o2#
间接参数化是混乱的。为了避免这种情况,我通常编写fixture,使其返回一个函数。最后我会这样写: