У меня есть класс, который предназначен для генерации случайного пароля длины, которая также случайна, но ограничена, чтобы быть между определенной минимальной и максимальной длиной.
Я создаю модульные тесты и столкнулся с интересной небольшой проблемой с этим классом. Вся идея модульного теста заключается в том, что он должен быть повторяемым. Если вы запускаете тест сто раз, он должен давать те же результаты сто раз. Если вы зависите от какого-либо ресурса, который может присутствовать, а может и не быть, или может быть, а может и не находиться в исходном состоянии, которое вы ожидаете, тогда вы должны высмеять этот ресурс, чтобы убедиться, что ваш тест действительно всегда повторяется.
Но что делать в случаях, когда SUT должен генерировать неопределенный результат?
Если я установлю минимальную и максимальную длину на одно и то же значение, тогда я могу легко проверить, что сгенерированный пароль имеет ожидаемую длину. Но если я укажу диапазон допустимых длин (скажем, 15–20 символов), то у вас теперь есть проблема, что вы можете выполнить тест сто раз и получить 100 проходов, но при 101-м запуске вы можете получить обратно 9-символьную строку.
В случае с классом пароля, который по своей сути довольно прост, он не должен вызывать огромных проблем. Но это заставило меня задуматься об общем случае. Какую стратегию обычно принимают в качестве наилучшей стратегии при работе с ТРИ, которые генерируют неопределенный выход по проекту?