Su objetivo es probar shuffle(). Como sabes cómo construiste shuffle(), sería una prueba de unidad determinista de tu baraja inicial frente a la baraja barajada si pudieras conocer la serie de números generados.
Este es un caso donde inyectar un método en su clase Deck() durante la prueba puede hacer que su función de mezcla sea determinista.
Cree su clase para usar la función aleatoria() por defecto pero para usar una función de generación de números predeterminada cuando se inyecte. Por ejemplo, en Python que puede hacer:
class Deck():
def __init__(self, rand_func = random.random):
self._rand = rand_func
def rand(self):
return self._rand()
Cuando el simple uso de la cubierta sin argumentos, se obtiene el número aleatorio se esperaba. Pero si crea su propia función de números aleatorios, puede generar su secuencia predeterminada de números.
Con esta construcción, ahora puede construir una plataforma inicial (el tamaño que desee) y una lista de números aleatorios (de nuevo, cualquiera que sea el tamaño que necesite) y sabrá qué esperar como salida. Debido a que shuffle() no cambia entre la versión inyectada y la versión verdaderamente aleatoria, puede realizar una prueba unitaria aleatoria() determinista y, sin embargo, tener un comportamiento aleatorio en el tiempo de ejecución. Incluso puede generar múltiples secuencias de números diferentes si hay casos de esquina que desea probar.
Con respecto a las respuestas del otro que implican modelos estadísticos: creo que son pruebas de nivel de aceptación para probar la exactitud del algoritmo "aleatorio", pero no determinísticamente prueba la implementación de la función shuffle().
Una idea sería ejecutar el shuffler en un mazo ordenado y ejecutar un algoritmo de distancia para ver cómo "lejos" sale el shuffle; y ejecute continuamente y compare con permutaciones previas de regreso a un cierto punto (digamos 10-12 mezclas con requisitos degradantes de distancia) y luego compare esos valores con la diferencia óptima; sin embargo, usted tendrá que probar y obtener esos números usted mismo. – Corazu