Desventajas
En primer lugar, se hace la prueba más complicado y un poco más difícil de depurar, ya que no puede ver directamente todos los valores que se alimentan en (aunque siempre existe la opción de generar casos de prueba como código o datos, también). Si está haciendo una lógica semi-complicada para generar sus datos de prueba aleatorios, también existe la posibilidad de que este código tenga un error. Los errores en el código de prueba pueden ser un problema, especialmente si los desarrolladores asumen inmediatamente que el error es el código de producción.
En segundo lugar, a menudo es imposible ser específico sobre la respuesta prevista. Si conoce la respuesta basada en la entrada, entonces hay una posibilidad decente de que solo esté aplicando la lógica bajo prueba (piénselo, si la entrada es aleatoria, ¿cómo conoce la salida esperada?) Como resultado, usted puede tener que negociar aseveraciones muy específicas (el valor debe ser x) para afirmaciones más generales de control de cordura (el valor debe estar entre y y z).
En tercer lugar, a menos que haya una amplia gama de entradas y salidas, a menudo puede cubrir el mismo rango utilizando valores bien elegidos en una unidad estándar de pruebas con menos complejidad. P.ej. elige los números -max, (-max + 1), -2, -1, 0, 1, 2, max-1, máx. (o lo que sea interesante para el algoritmo).
Upsides
Cuando se hace bien con el objetivo correcto, estas pruebas pueden proporcionar una muy valiosa pase las pruebas complementarias. He visto bastantes bits de código que, cuando son martillados por entradas de prueba generadas al azar, se abrochan debido a casos de bordes imprevistos. A veces agrego un pase de prueba de integración adicional que genera una carga de casos de prueba.
trucos adicionales
Si uno de sus pruebas al azar falla, aislar el valor 'interesante' y promover en una unidad de prueba independiente para asegurar que se puede corregir el error y nunca lo hará retroceder antes de registrar .
¿Podría decirnos cuál sería la ventaja? –
Aquí, edité la pregunta. Tnx! – Adibe7
Tenga en cuenta que si se siembra la entrada de un generador de números aleatorios (y solo se accede a ella en una sola cadena), la salida es reproducible y no aleatoria. Si la preocupación es solo la generación de un gran conjunto de datos representativos, aún puede usar un generador de números aleatorios sin que la prueba sea aleatoria ... – Kendrick