Mam klasę, która ma generować losowe hasło o długości, która jest również losowa, ale ograniczona do określonych między minimalną a maksymalną długością.
Tworzę testy jednostkowe i natknąłem się na interesującą małą przeszkodę w tej klasie. Cała idea testu jednostkowego polega na tym, że powinien on być powtarzalny. Jeśli uruchomisz test sto razy, powinien on dać te same wyniki sto razy. Jeśli zależysz od jakiegoś zasobu, który może, ale nie musi, znajdować się w początkowym stanie, którego oczekujesz, masz za zadanie kpić z danego zasobu, aby upewnić się, że Twój test jest zawsze powtarzalny.
Ale co z przypadkami, w których SUT ma generować nieokreślony wynik?
Jeśli poprawię minimalną i maksymalną długość na tę samą wartość, mogę łatwo sprawdzić, czy wygenerowane hasło ma oczekiwaną długość. Ale jeśli podam zakres akceptowalnych długości (powiedzmy 15-20 znaków), wtedy masz problem, że możesz uruchomić test sto razy i uzyskać 100 przebiegów, ale przy 101 biegu możesz odzyskać ciąg 9 znaków.
W przypadku klasy haseł, która jest dość prosta w swoim rdzeniu, nie powinna stanowić dużego problemu. Ale pomyślałem o ogólnym przypadku. Jaka strategia jest zwykle akceptowana jako najlepsza do wyboru, gdy mamy do czynienia z SUT, które generują nieokreślony wynik z projektu?