estoy tomando una puñalada en la creación de pruebas unitarias para algunas clases de utilidad en un proyecto que estoy trabajando, y una de las clases (contiene información de licencia) tiene un método eso hace algo de determinación basado en la hora actual.Manejo de pruebas unitarias con una condición en la hora actual
es decir, la licencia contiene una fecha de caducidad, y la cadena de la licencia valida esa fecha, pero la lógica real para ver si la licencia expiró se basa en la hora actual.
public boolean isValid()
{
return isLicenseStringValid() && !isExpired();
}
public boolean isExpired()
{
Date expiry = getExpiryDate();
if(expiry == null) {
return false;
}
Date now = new Date();
return now.after(expiry);
}
Por lo tanto, no estoy seguro de qué hacer, ya que el 'new Date()' que no es un criterio estático.
- ¿Debo no se molestan en comprobar 'isValid', y justo prueba 'isLicenseStringValid()' y el 'getExpiryDate()' función por separado?
- ¿Acabo de utilizar una clave de licencia en la prueba con una larga expiración loca de modo que habré cambiado de trabajo antes de que caduque?
- ¿Trato de burlarse out 'new Date()' a algún método 'getCurrentTime()' tal que puedo fingir que hora es ahora?
¿Qué hacen normalmente otros con las pruebas que dependen del tiempo?
Por cierto, veo un problema en su código que no sea la lógica fecha: si (caducidad == null) {return false ; } No creo que deba devolver 'false' en el método' isExpired() 'si la fecha de caducidad es nula. Para obtener más información, lea: https://www.owasp.org/index.php/Fail_securely – Garbage
Es un objeto de licencia que tiene dos modos posibles: 1. perpetuo sin fecha de caducidad (de ahí lo anterior) 2. temporal con una fecha de caducidad por lo tanto, es correcto que, si no hay una fecha de vencimiento establecida, no está vencida. –