相关疑难解决方法(0)

覆盖unittest的auto_now

我已经为数据库中的事件定义了一些时间戳auto_now_add,因为信息应该与事件存储时的时间戳一起存储.

事件的描述是这样的

class NewEvent(models.Model):
    '''
    Individual event
    '''
    name = models.CharField(max_length=100)
    quantity = models.FloatField(null=True)
    timestamp = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

为了测试模块,我在test.py文件中的数据库中生成一些信息,这样:

    for event in EVENT_TYPES:
        time = datetime.datetime.now() - datetime.timedelta(days=1)
        for i in range(48):
            time = time.replace(hour=i / 2)
            NewEvent(name=event,
                     timestamp=time,
                     quantity=i).save()
Run Code Online (Sandbox Code Playgroud)

我必须生成具有昨天时间戳的事件(模块将汇总它们).问题是您无法覆盖时间戳.时间戳是它生成事件时的时间戳,文档非常清楚地说明了这一点.

那么,如何使用合适的时间戳生成测试数据呢?我有几个想法:

  • 也许在Model类之外以不同的方式生成数据库数据.在哪里以及如何?
  • 以某种方式定义一个不同的类或更改类以在测试期间表现不同,类似于

_

 if testing:
     timestamp = models.DateTimeField(auto_now_add=True)
 else:
     timestamp = models.DateTimeField(auto_now_add=False)
Run Code Online (Sandbox Code Playgroud)

或者也许有更简单的方法来做到这一点......任何想法?

python django unit-testing

6
推荐指数
2
解决办法
1966
查看次数

Django模拟时区感知日期时间创建模型

我有一个测试,我创建了几个对象:

def test_get_courier_task_returns_couriers_tasks(self):
    with patch('django.utils.timezone.now', return_value=make_aware(datetime(2018, 1, 24, 11, 57))):
        task1 = TaskFactory()

        response = json.loads(MyAPI.get_tasks_list(self.user.username))
        print('[*] Response timestamp: {}'.format(response['content'][0]['timestamp']))
Run Code Online (Sandbox Code Playgroud)

设置为 True的Taskhascreated_timestamp字段auto_add_now和上面to_json()使用的方法get_tasks_list()

class Task(models.Model):
    created_timestamp = models.DateTimeField(auto_now_add=True)

    def to_json(self):
        to_return = {
            'timestamp': self.created_timestamp.strftime('%d-%m-%Y %H:%M')
        }
        return to_return
Run Code Online (Sandbox Code Playgroud)

不幸的是,测试给出了这个输出:

[*] 响应时间戳:24-01-2018 10:57

我已经检查过这是时区感知,但不是给我 UTC+1,而是在保存时给我 UTC+0。我需要做什么?我USE_TZ = True在我的设置中已经应用了迁移。这个问题对我的问题没有帮助。

python django datetime

0
推荐指数
1
解决办法
942
查看次数

标签 统计

django ×2

python ×2

datetime ×1

unit-testing ×1