Ho una classe che ha lo scopo di generare una password casuale di una lunghezza che è anche casuale, ma limitata a essere compresa tra una lunghezza minima e massima definita.
Sto costruendo unit test e ho incontrato un piccolo inconveniente interessante con questa classe. L'idea alla base di un test unitario è che dovrebbe essere ripetibile. Se si esegue il test cento volte, si dovrebbero ottenere gli stessi risultati cento volte. Se dipendi da una risorsa che può essere o non essere presente o potrebbe essere o non essere nello stato iniziale che ti aspetti, allora devi prendere in giro la risorsa in questione per assicurarti che il test sia sempre ripetibile.
Ma che dire nei casi in cui si suppone che il SUT generi un output indeterminato?
Se aggiusto la lunghezza minima e massima allo stesso valore, posso facilmente verificare che la password generata sia della lunghezza prevista. Ma se specifico un intervallo di lunghezze accettabili (diciamo 15-20 caratteri), ora hai il problema di poter eseguire il test centinaia di volte e ottenere 100 passaggi, ma al 101 ° giro potresti recuperare una stringa di 9 caratteri.
Nel caso della classe password, che è abbastanza semplice nel suo nucleo, non dovrebbe rivelarsi un grosso problema. Ma mi ha fatto pensare al caso generale. Qual è la strategia che di solito viene accettata come la migliore da prendere quando si tratta di SUT che generano output indeterminati in base alla progettazione?