Prova a lavorare a un livello superiore: quale caso d'uso a cui si preoccupa l'azienda non funzionerà se TTL non è 30 secondi?
Più in generale:
Non scrivere test unitari per cose che non possono fallire; infastidisce il maiale.
Scrivere test che verifichino un'implementazione specifica di solito è una cattiva idea. Quando in un secondo momento avrai un modo migliore per implementare ciò che ti serve, tutti questi test verranno gettati via (o no), forse qualcuno dovrà esaminarli per cercare di capire se ci sono affari valore lasciato nascosto in loro - più sprechi!).
Il che non vuol dire che non sia bello avere un blocco e un placcaggio quando sei giù nelle trincee cercando di far funzionare qualcosa la prima volta. Ad esempio, quando stai facendo un picco di alcune funzionalità, i test specifici dell'implementazione possono essere di conforto, poiché consentono di identificare più rapidamente che cosa è andato storto, piuttosto che semplicemente quale requisito ha stato mancato.
Ad esempio, non dovresti scrivere un test per verificare getRandomNumber () Questo è solo squilibrato. Invece, scrivi test che assicurano che qualsiasi implementazione che supera i test sia accettabile per il business.
Considera l'ordinamento, ad esempio. A meno che ciò che si sta effettivamente spedendo sia il Ordinamento di bolle su scala Web migliore al mondo , non ci si preoccupa dei dettagli di implementazione sotto il cofano. Ciò che ti interessa è se un gruppo di casi d'uso patologici o meno produca risultati accettabili. Ti interessa sapere se alcuni casi di dati patologici fanno diventare instabile il tuo comparatore, e così via.
Detto questo, certi tipi di cose sono un vero dolore da provare. Caches sarebbe uno di loro; una cache è fondamentalmente un compromesso memoria / computazione, di solito fatto per migliorare uno SLA, piuttosto che fornire garanzie di correttezza aggiuntive. Quindi un test unitario duraturo per questo potrebbe sembrare
given(User.hasBeenIdleFor(MINUTES(29)))
.when(User.loadsPage())
.expect(Probability(Page.loadsWithin(MILLISECONDS(1)))>Probability.NINES(3));
e poi provi a capire come implementare quel test per soddisfare
Probability.testExecutesWithin(SECONDS(1)) > Probability.NINES(2);
Whee - momenti divertenti.