Ho una classe che ha lo scopo di generare una password casuale di una lunghezza che è anche casuale, ma limitata ad essere compresa tra una lunghezza minima e una massima definita.
Sto costruendo test unitari e mi sono imbattuto in un piccolo intoppo interessante con questa classe. L'idea alla base di un test unitario è che dovrebbe essere ripetibile. Se corri il test un centinaio di volte, dovrebbe dare gli stessi risultati un centinaio di volte. Se stai dipendendo da una risorsa che può o non può esserci o potrebbe o meno essere nello stato iniziale che ti aspetti, allora sei obbligato a prendere in giro la risorsa in questione per assicurarti che il tuo test sia sempre ripetibile.
Ma 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 specifichi un intervallo di lunghezze accettabili (diciamo 15 - 20 caratteri), ora hai il problema che potresti eseguire il test un centinaio di volte e ottenere 100 passaggi ma sulla 101esima corsa potresti ottenere una stringa di 9 caratteri indietro.
Nel caso della classe password, che è abbastanza semplice nel suo nucleo, non dovrebbe dimostrare un grosso problema. Ma mi ha fatto pensare al caso generale. Qual è la strategia che viene generalmente accettata come la migliore da prendere quando si ha a che fare con SUT che generano output indeterminati per progetto?