在 unittests 中冻结数据库时间(django & sqlite)



我有一个查询,它根据视图的年龄生成分数。如您所见,我正在SQL中进行年龄计算。查询如下所示。

SELECT
    SUM(1.0 / (julianday('now') - julianday(view.date))) as score
FROM
    view;

在我的单元测试中,我想做类似的事情

self.assertEqual(actual_score, expected_score)

通常,如果我在python中进行年龄计算,我可以用类似django.test.utils.freeze_time的东西来冻结时间。但是,由于日期差异是在SQL中完成的,因此这是不可能的。

如何在单元测试中冻结时间,以便julianday('now')生成配置的值,并且可以准确计算预期分数。

SQLite 保证同一查询中的所有时间函数返回相同的时间。但是,这不适用于多个语句。

您可以安装自己的用户定义函数来替换julianday()(或您正在使用的任何函数)。或者,编写自己的 VFS。

最新更新