Cualquier prueba de software es como "Prueba por ejemplo", no solo pruebas unitarias utilizando una herramienta como JUnit. Y eso no es nueva sabiduría, hay una cita de Dijkstra de 1960, que dice esencialmente lo mismo:
"Las pruebas muestran la presencia, no la ausencia de errores"
(solo reemplace las palabras "shows" por "pruebas"). Sin embargo, esto también es cierto para las herramientas que generan datos de prueba aleatorios. El número de posibles entradas para una función del mundo real suele ser mayor en órdenes de magnitud que el número de casos de prueba que uno puede producir y verificar contra un resultado esperado dentro de la edad del universo, independientemente del método de generación de esos casos, por lo que incluso si uno usa una herramienta generadora para producir muchos datos de prueba, no hay garantía de no perderse el único caso de prueba que podría haber detectado un determinado error.
Las pruebas aleatorias a veces pueden revelar un error que fue ignorado por los casos de prueba creados manualmente. Pero, en general, es más eficiente diseñar cuidadosamente las pruebas para la función que se va a probar, y asegurarse de que uno obtenga un código completo y una cobertura de ramificación con el menor número de casos de prueba posible. A veces es una estrategia factible combinar pruebas generadas manualmente y al azar. Además, cuando se usan pruebas aleatorias, uno debe tener cuidado para obtener los resultados de manera reproducible.
Por lo tanto, las pruebas creadas manualmente no son peores que las pruebas generadas al azar, a menudo todo lo contrario.