亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么要在工廠功能上使用pytest工廠作為固定裝置?

為什么要在工廠功能上使用pytest工廠作為固定裝置?

肥皂起泡泡 2021-05-09 16:14:09
在py.test文檔中,它描述了將工廠方法聲明為fixture,例如:@pytest.fixturedef make_foo():    def __make_foo(name):        foo = Foo()        foo.name = name        return foo    return __make_foo與僅定義make_foo函數并使用它相比,這樣做有什么好處/缺點?我不明白為什么它是固定裝置。
查看完整描述

3 回答

?
慕標5832272

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工廠的測試,并調用它以在任何端口中獲取初始化的客戶端,以及需要多少次!


查看完整回答
反對 回復 2021-05-18
?
寶慕林4294392

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


查看完整回答
反對 回復 2021-05-18
  • 3 回答
  • 0 關注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號