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
添加回答
舉報