J'ai défini certains horodatages pour les événements dans la base de données comme auto_now_add
, car les informations doivent être stockées avec leur horodatage en même temps que l'événement est stocké.Remplacer auto_now pour unittest
La description des événements est quelque chose comme
class NewEvent(models.Model):
'''
Individual event
'''
name = models.CharField(max_length=100)
quantity = models.FloatField(null=True)
timestamp = models.DateTimeField(auto_now_add=True)
Pour tester le module, je générer des informations dans la base de données dans le fichier test.py
, de cette façon:
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()
je dois générer des événements avec son horodatage d'hier (le module les résumera ensuite). Le problème est que vous ne pouvez pas remplacer l'horodatage. L'horodatage c'est celui où l'événement est produit, le documentation le dit très clairement. Alors, comment générer des données avec des horodatages appropriés pour le test? J'ai eu plusieurs idées:
- Peut-être générer les données de base de données d'une manière différente, en dehors des classes de modèle. Ou et comment?
- définissent une certaine façon une autre classe ou changer la classe à se comporter différemment au cours du test, quelque chose comme
_
if testing:
timestamp = models.DateTimeField(auto_now_add=True)
else:
timestamp = models.DateTimeField(auto_now_add=False)
Ou peut-être il y a une encore plus facile de le faire ... Des idées?
Que diriez-vous de 'timestamp = models.DateTimeField (auto_now_add = testing)' par simplification? –
La variable 'testing' sera True si elle est testée? Ce sera génial, mais dans ce cas, ça devrait être quelque chose comme 'auto_now_add = ne pas tester ', je pense ... – Khelben
C'est votre question et votre exemple, n'hésitez pas à le réparer. –