在单元测试中冻结数据库时间(django& sqlite)

时间:2017-01-13 10:58:18

标签: python django database sqlite unit-testing

我有一个查询,根据视图的年龄生成分数。如您所见,我正在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')生成配置值,我可以准确计算预期分数。

1 个答案:

答案 0 :(得分:0)

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

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