Любое тестирование программного обеспечения похоже на «Proof By Example», а не только на модульное тестирование с использованием такого инструмента, как JUnit. И это не новая мудрость, есть цитата из Дейкстры 1960 года, которая говорит, по сути, то же самое:
«Тестирование показывает наличие, а не отсутствие ошибок»
(просто замените слова «показывает» на «доказательства»). Однако это также верно для инструментов, которые генерируют случайные тестовые данные. Количество возможных входных данных для функции реального мира обычно на порядки больше, чем количество тестовых случаев, которые можно произвести и проверить по ожидаемому результату в возрасте вселенной, независимо от метода генерации этих случаев, поэтому даже если кто-то использует инструмент генератора для получения большого количества тестовых данных, нет гарантии, что вы не пропустите один тестовый случай, который мог бы обнаружить определенную ошибку.
Случайные тесты могут иногда выявить ошибку, которая была пропущена вручную созданными тестовыми примерами. Но в целом более эффективно тщательно создавать тесты для функции, подлежащей тестированию, и следить за тем, чтобы получить полный код и охват ветвлений с как можно меньшим количеством тестовых случаев. Иногда целесообразно комбинировать вручную и случайно сгенерированные тесты. Более того, при использовании случайных тестов нужно позаботиться о том, чтобы результаты были воспроизводимыми.
Таким образом, созданные вручную тесты ничуть не хуже, чем случайно сгенерированные тесты, часто наоборот.