You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为返回00:00:00的datetime日期函数编写单元测试

单元测试编写方案

你提供的get_date函数功能是返回当日零点整的datetime对象,测试的核心是规避真实系统时间的影响,通过mock固定datetime.today()的返回值做断言即可,具体实现如下:

测试逻辑

  • 用mock工具固定datetime.today()的返回值,避免测试结果随运行时间变化
  • 断言返回结果的日期部分和mock的当前日期一致
  • 断言返回结果的时间部分严格为0时0分0秒0微秒

代码示例

基于pytest的实现

from datetime import datetime
from unittest.mock import patch
from your_module import get_date # 此处替换为你实际的函数导入路径

def test_get_date():
    # 自定义模拟的当前时间,可替换为任意边界日期做覆盖测试
    mock_current = datetime(2024, 2, 29, 16, 45, 30)
    with patch("your_module.datetime.today", return_value=mock_current):
        res = get_date()
        # 验证日期部分匹配
        assert res.year == 2024
        assert res.month == 2
        assert res.day == 29
        # 验证时间部分为零点
        assert res.hour == 0
        assert res.minute == 0
        assert res.second == 0
        assert res.microsecond == 0

基于Python自带unittest的实现

import unittest
from datetime import datetime
from unittest.mock import patch
from your_module import get_date

class TestGetDate(unittest.TestCase):
    def test_normal_date(self):
        mock_current = datetime(2023, 12, 31, 23, 59, 59)
        with patch("your_module.datetime.today", return_value=mock_current):
            self.assertEqual(get_date(), datetime(2023, 12, 31, 0, 0, 0))
    
    def test_leap_day(self):
        mock_current = datetime(2024, 2, 29, 10, 0, 0)
        with patch("your_module.datetime.today", return_value=mock_current):
            self.assertEqual(get_date(), datetime(2024, 2, 29, 0, 0, 0))

if __name__ == "__main__":
    unittest.main()

注意事项

patch里的路径必须填函数所在模块导入的datetime路径,不能直接写datetime.datetime.today,否则mock不会生效。你也可以新增更多边界日期的测试用例,比如月初、年末、闰日等场景做全覆盖验证。

内容的提问来源于stack exchange,提问作者Girl007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 19:15:03