Existen algunos dominios de aplicación (por ejemplo, GameDev) en los que se deben crear muchas funciones utilizando valores aleatorios para producir su salida. Uno de los ejemplos se presenta a continuación:¿Cómo validar la corrección de funciones que usan al azar?
def generate_key(monster_key_drop_coef):
key_letters = string.ascii_uppercase
rand = random.random()
if monster_key_drop_coef < rand:
return None
button = {}
button["type"] = random.choice([1,2,3])
button["letter"] = random.choice(key_letters)
return button
Esta función genera la caída del elemento en función de varias operaciones aleatorias. El problema aparece si desea validar automáticamente la corrección de esta función. Los valores generados no son deterministas y la escritura de pruebas de regresión parece ser imposible.
Mis preguntas son:
- Es esto posible escribir pruebas de regresión útiles para este tipo de funciones ?
- ¿Hay algún método general para crear otro tipo de pruebas en este caso?
Hay libros enteros escritos sobre este tema. Ejemplo: http://www.johndcook.com/Beautiful_Testing_ch10.pdf –
Burlarse del RNG para entregar resultados conocidos (y luego probar con productos específicos para los cuales se conoce el resultado deseado) es un enfoque. –