【发布时间】:2010-02-16 14:14:32
【问题描述】:
我已经为数据库中的事件定义了一些时间戳为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)
为了测试模块,我在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()
我必须生成带有昨天时间戳的事件(然后模块将汇总它们)。问题是您无法覆盖时间戳。时间戳是它产生事件的时间,documentation 非常清楚地说明了这一点。
那么,如何为测试生成具有适当时间戳的数据?我有几个想法:
- 可能在模型类之外以不同的方式生成数据库数据。地点和方式?
- 以某种方式定义不同的类或更改类以在测试期间表现不同,例如
_
if testing:
timestamp = models.DateTimeField(auto_now_add=True)
else:
timestamp = models.DateTimeField(auto_now_add=False)
或者也许有更简单的方法来做到这一点......有什么想法吗?
【问题讨论】:
-
把
timestamp = models.DateTimeField(auto_now_add=testing)简化一下怎么样? -
testing变量在测试时是否为真?那会很棒,但在这种情况下,我认为应该是auto_now_add=not testing之类的...... -
这是你的问题和你的榜样,请随时解决。
-
对于动态选项,请参阅下面的答案。
标签: python django unit-testing