冻结日期:冻结日期时间。现在以已知值进行测试
frozendate的Python项目详细描述
Frozendate在测试运行时暂停时间。
frozendate模拟datetime.datetime和datetime.date以提供已知的 测试时的次数。
用法
import frozendate with frozendate.freeze(1999, 1, 1): party_like_its_1999() # freeze relative freezes time relative to the current date... with freeze_relative(days=-1): assert all_my_troubles_seemed_so_far_away() with freeze(1999, 12, 31): # ...or relative to the previous freeze with freeze_relative(days=1): print "happy new year!"
通常情况下,当你使用“冻结”时,时间并不会停止——它只是开始 再次从指定的固定点开始,例如:
>>> import frozendate >>> import datetime >>> with frozendate.freeze(2000, 1, 1): ... print datetime.now().replace(microsecond=0) ... time.sleep(1) ... print datetime.now().replace(microsecond=0) ... 2000-01-01 00:00:00 2000-01-01 00:00:01
但如果通过hard=True:
>>> with frozendate.freeze(2000, 1, 1, hard=True): ... print datetime.now().replace(microsecond=0) ... time.sleep(1) ... print datetime.now().replace(microsecond=0) ... 2000-01-01 00:00:00 2000-01-01 00:00:00
除了上下文管理器之外,还有常规的修补和取消修补 功能。 这些在测试用例设置/拆卸方法中很有用:
def setUp(self): frozendate.patch(2000, 1, 1) def tearDown(self): frozendate.unpatch()
当您调用freeze或patch时,它会冻结在 sys.modules。 有时您希望仅限于几个命名模块:
frozendate.freeze(modules=['mypackage.mymodule'])
或者修补所有内容,但排除一些需要实时日期的模块 静止:
frozendate.freeze(dontpatch=['somemodule', 'someotherpackage'])
0.1.3(发布日期:2018-10-10)
- 修复与dateutil一起使用时出现的异常
- 添加对Python3.7的支持
- 放弃对Python2.6的支持
版本0.1.2
- 添加对冻结datetime.utcnow()的支持
版本0.1.1
- 与6一起使用时修复导入程序
0.1版
- 初始版本