簡體   English   中英

使用帶有 Python 模擬的生成器來復制服務器響應

[英]Using a generator with Python mock to replicate server responses

我想使用一個列表(轉換為生成器)作為我的 API 調用的模擬(使用unittest.mock )。 我的 function 是:

def monitor_order(order_id)
    order_info = client.get_order_status(order_id)
    order_status = order_info['status']

    while order_status != 'filled':
        print('order_status: ', order_status)
        time.sleep(5)
        order_info = client.get_order_status(order_id)
        order_status = order_info['status']

    return order_info

我的測試 function 是:

@patch('my_package.client.get_order_status')
def test_monitor_order(mocked_get_order_status):
    order_states = [
        dict(status='open'),
        dict(status='open'),
        dict(status='filled'),
    ]

    # Make into a generator
    status_changes = (status for status in order_states)
    mocked_get_order_status.return_value = next(order_states)

    # Execute function to test
    monitor_order("dummy_order")

但是,我可以看到執行測試時狀態始終為“打開”:

order_status:  open
order_status:  open
order_status:  open

我想我理解它為什么錯了,但我怎樣才能正確地實現它呢?

為了實現你想要的,你可以重寫你的測試如下:

@patch('my_package.client.get_order_status')
def test_monitor_order(mocked_get_order_status):
    order_states = [
        dict(status='open'),
        dict(status='open'),
        dict(status='filled'),
    ]

    mocked_get_order_status.side_effect = order_states

    # Execute function to test
    monitor_order("dummy_order")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM