Mi sto dando da fare per impostare i test unitari per alcune classi di utilità in un progetto su cui sto lavorando e una delle classi (contiene informazioni sulla licenza) ha un metodo questo fa una certa determinazione in base al tempo corrente.Gestione dei test delle unità con una condizione sull'ora corrente
ovvero la licenza contiene una data di scadenza e la stringa di licenza convalida quella data, ma la logica effettiva per verificare se la licenza è scaduta si basa sull'ora corrente.
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);
}
Quindi, io non sono sicuro di cosa fare, dal momento che la 'new Date()' cosa non è un criterio statico.
- Devo non si preoccupano di verificare 'isValid', e proprio test 'isLicenseStringValid()' e la 'getExpiryDate()' funzione separatamente?
- Ho appena usato una chiave di licenza nel test con una lunga scadenza pazzesca tale che avrò commutato i lavori prima che scada?
- Si tenta di prendere in giro "new Date()" con un metodo 'getCurrentTime()' in modo tale da poter simulare l'ora in cui è ora?
Che cosa fanno normalmente gli altri con i test che sono condizionati dal tempo?
BTW, vedo un problema nel codice diverso logica Data: se (scadenza == null) { return false; } Non penso che dovresti restituire 'false' sul metodo' isExpired() 'se la data di scadenza è nulla. Per ulteriori informazioni, leggi - https://www.owasp.org/index.php/Fail_security – Garbage
È un oggetto di licenza con due possibili modalità: 1. perpetuo senza data di scadenza (da cui sopra) 2. temporaneo con una data di scadenza quindi, è corretto che se non è impostata alcuna data di scadenza, non è scaduta. –