He creado un sistema de facturación CMS + de pago para un cliente y necesito ser más estricto con mis pruebas.Simulando el paso del tiempo en la prueba unitaria
Guardo todos mis datos en un Django ORM y tengo un montón de tareas de Apio que se ejecutan en diferentes intervalos que aseguran que se envíen nuevas facturas y recordatorios de facturas y cortes de acceso cuando los usuarios no pagan sus facturas.
Por ejemplo, me gustaría ser capaz de ejecutar una prueba que:
crea un nuevo usuario y genera una factura por X días de acceso al sitio
simula el pasando de X + 1 día, y ejecuta todas las tareas que tengo configuradas en Apio.
Comprueba que se haya emitido una nueva factura para otros X días para el usuario.
El enfoque de KISS que he encontrado hasta el momento es hacer todas las pruebas en una máquina separada y en realidad manipular la fecha/hora en el nivel de sistema operativo. Así que la secuencia de comandos de prueba sería:
Establecer la fecha del sistema a día 1
Crear un nuevo usuario y generar la primera factura por X días de acceso
Avance entonces la fecha del sistema 1 día . Ejecuta todas mis tareas de apio. Repita hasta X + 1 días han "pasado"
Compruebe que una nueva factura se ha emitido
Es un poco torpe, pero creo que podría funcionar. ¿Alguna otra idea sobre cómo hacerlo?
Aparece un error al intentar esto: TypeError: no se pueden establecer los atributos del tipo de extensión/incorporada 'datetime.datetime'.Rastreo: Rastreo (llamada más reciente): // Archivo "", línea 1, en // Archivo "/usr/lib/python2.7/dist-packages/mock.py", línea 623, en __enter__ // setattr (self.target, self.attribute, new_attr) –
Alfe
Disculpe, lo olvidé. He tenido ese problema recientemente, y tengo una solución alternativa. Solo dame unos minutos y actualizaré la respuesta. – madjar
Hmm, no obtuve la versión ejecutándose también, lo siento. Después de llamar a 'setUp()' los resultados de 'datetime.datetime.now()' no se ven afectados por la configuración 'self.time'. Tal vez me estoy equivocando todavía. – Alfe