簡體   English   中英

模擬時間戳單元測試 Python

[英]Mock timestamp Unit Test Python

我有那個代碼:

from datetime import datetime, timedelta
    def func():
   
        date = datetime.today() - timedelta(days=1)
        timestamp = (str(date.timestamp()).split(".")[0]) + "000"
    
        return DataAccess().get(
            sort_key="CampaignRecipientsReport#" + timestamp,
        )

現在我需要模擬一個變量時間戳以在我的單元測試中使用它

mock_data_access.return_value.get.assert_called_once_with(
      sort_key="CampaignRecipientsReport#" + timestamp,
)

不,您不需要模擬函數的局部變量timestamp 相反,您需要重新設計您的 function。 你的問題是,你的 function 是狀態相關的,因此有副作用。

即你應該能夠傳遞時間戳。 如果您經常需要當前日期時間,則可以將其默認為該值,前提是未指定任何值。 這使得 function 更加靈活,狀態依賴性和可測試性更低。

from datetime import datetime, timedelta
from typing import Optional


def func(timestamp: Optional[datetime] = None):
   
    if timestamp is None:
        timestamp = datetime.today() - timedelta(days=1)

    timestamp = (str(timestamp.timestamp()).split(".")[0]) + "000"
    
    return DataAccess().get(
        sort_key="CampaignRecipientsReport#" + timestamp
    )

暫無
暫無

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

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