【问题标题】:django-rest-framework APITestCase + assertEqual of timestampdjango-rest-framework APITestCase + 时间戳的 assertEqual
【发布时间】:2015-08-11 19:56:15
【问题描述】:

我的模型中有一个“auto_now_add”时间戳,如下所示:

created_on = models.DateTimeField(auto_now_add = True)

我使用出色的 DRF3.0 开发了一个 REST API,在我的单元测试中我希望有类似的东西:

self.assertEqual(response.data, data)

我的问题很简单:如何提前知道这个时间戳的值,以便用实际值进行测试(assertEqual)?

【问题讨论】:

    标签: django unit-testing timestamp django-rest-framework


    【解决方案1】:

    您希望用它来测试什么?那个 Django 设置 created_on 正确吗?这是 Django 测试的工作。您应该测试自己的代码。

    对于单元测试,您应该只测试您的方法,甚至不保存您的模型。这要快得多,而且通常就足够了。只有在检查查询时才需要保存模型并检查已保存的数据,因为不保存很难测试。

    需要将数据保存到数据库的另一个用例是进行功能/集成测试时。但是您可能不会测试单个字段,而是测试整体效果。

    如果你真的要设置确切的值,你可以尝试直接在 Django 代码中模拟它(我担心这会很快给你带来问题):

    from mock import patch
    
    with patch('django.db.models.fields.datetime') as datetime:
      datetime.date.today.return_value = fixed_date
      # your testing code
    

    【讨论】:

    • 感谢您的回答。实际上我正在测试 API,并想测试完全返回的 JSON。
    • 我现在正在做的是使用 response.data.pop('created_on', None) 忽略测试中的时间戳
    猜你喜欢
    • 1970-01-01
    • 2013-07-31
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多