3 回答
TA贡献1966条经验 获得超4个赞
实际上,最重要的优点是能够使用其他固定装置,并为您提供pytest的依赖项注入。另一个优点是允许您将参数传递给工厂,而这些参数在普通灯具中必须是静态的。
看这个例子:
@pytest.fixture
def mocked_server():
with mock.patch('something'):
yield MyServer()
@pytest.fixture
def connected_client(mocked_server):
client = Client()
client.connect_to(mocked_server, local_port=123) # local_port must be static
return client
现在,您可以编写一个获取的测试connected_client,但不能更改端口。如果您需要与多个客户进行测试该怎么办?你也不能。
如果您现在写:
@pytest.fixture
def connect_client(mocked_server):
def __connect(local_port):
client = Client()
client.connect_to(mocked_server, local_port)
return client
return __connect
您可以编写接收connect_client工厂的测试,并调用它以在任何端口中获取初始化的客户端,以及需要多少次!
TA贡献2021条经验 获得超8个赞
如果您有许多简单的工厂,则可以使用decorator简化它们的创建:
def factory_fixture(factory):
@pytest.fixture(scope='session')
def maker():
return factory
maker.__name__ = factory.__name__
return maker
@factory_fixture
def make_stuff(foo, bar):
return 'foo' + str(foo + bar)
这相当于
@pytest.fixture(score='session')
def make_stuff():
def make(foo, bar):
return 'foo' + str(foo + bar)
return
添加回答
举报