2012-04-03 11 views
6

Quiero escribir algunos casos de prueba para mi aplicación web, pero atascado en algunos casos como "Este token debe caducar en 30 días". A nadie le gusta esperar 30 días antes de que finalicen las pruebas.¿Cómo escribir el testcase para probar cosas como "30 días vencen"?

También hay otros casos sobre algunos eventos programados a suceder, como "Enviar este correo electrónico 2 semanas después de que el usuario inscribirse", "Generar un proyecto de ley 2 días antes de la próxima fecha de facturación", etc.

Qué sugerencia ¿Tienes al escribir tales casos de prueba? ¿O hay otra forma de asegurarse de que estas funciones funcionen con la precisión que se diseñó?

Respuesta

4

Mi enfoque al escribir estas pruebas es definir la caducidad en milisegundos. De esta forma, puede escribir pruebas fácilmente porque sus entornos de prueba pueden definir una caducidad de 1 ms. El entorno de producción definirá obviamente la duración adecuada. Normalmente, estos se pueden establecer como valores de configuración o valores db.

+0

De acuerdo. Realmente necesitará reglas diferentes en Dev y QA que en Producción para poder probar este tipo de casos. – mydoghasworms

0

Desconecte la funcionalidad y pruebe los pasos individuales.

Vencer un elemento después de cierto tiempo consiste en colocar el elemento en algún lugar con una marca de tiempo de vencimiento y otra parte del programa que expira con una fecha y hora anterior. En consecuencia, compruebe que los nuevos elementos se inserten correctamente con la marca de tiempo correcta y que el código de caducidad elimine correctamente los elementos que tienen 30 días o más. El artículo que se inserta y quita no tiene que ser el mismo por el bien de la prueba.

Lo mismo se aplica al correo electrónico que se envía después de un cierto intervalo.

1

supongo que tiene algo de código como

if(token.ExpirationDateTime > DateTime.Now) 
{ 
    // do some job to expire 
} 

Por lo general proporcionan las clases con tal lógica con un campo inyectada de tipo Func<DateTime>. Por ejemplo

public class ExpirationManager 
{ 
    private Func<DateTime> _nowProvider; 

    public ExpirationManager(Func<DateTime> nowProvider) 
    { 
    _nowProvider = nowProvider; 
    } 
} 

continuación, el código de caducidad parece

if(token.ExpirationDateTime > _nowProvider()) 
{ 
    // do some job to expire 
} 

De esta manera se puede sustituir la hora actual del sistema real con lo DataTime desea al hacer las pruebas (por ejemplo, pruebas de unidad).

Cuestiones relacionadas