繁体   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