【发布时间】:2017-11-24 10:28:00
【问题描述】:
我所有测试的基准是,总会有一辆出租车至少载有一名乘客。我可以通过一些基本装置轻松实现此设置:
from blah import Passenger, Taxi
@pytest.fixture
def passenger():
return Passenger()
@pytest.fixture
def taxi(passenger):
return Taxi(rear_seat=passenger)
测试基线很简单:
def test_taxi_contains_passenger(taxi)
assert taxi.has_passenger()
当我开始需要更复杂的测试设置时,我的问题就出现了。在某些情况下,我需要出租车有不止一名乘客,在某些情况下,我需要定义乘客属性。例如:
def test_three_passengers_in_taxi(taxi)
assert taxi.has_passengers(3)
assert taxi.front_passenger_is_not_a_child()
我可以通过为特定测试使用特定的固定装置来解决这个问题。对于上述测试,我将创建以下夹具:
@pytest.fixture
def three_passenger_test_setup(taxi)
taxi.add_front_seat_passenger(Passenger(child=False))
taxi.add_rear_seat_passenger(Passenger())
return taxi
我可以将上面的夹具传递到我的测试用例中,一切都很好,但是如果我沿着这条路线走,我可能最终会为每个测试提供一个夹具,感觉应该有一种更有效的方法来做到这一点。
有没有办法将参数传递给夹具,以便这些参数可以用于创建夹具返回的对象?我应该参数化测试功能吗?夹具?还是我在浪费时间,每次测试都需要一个固定装置?
【问题讨论】: