Estoy trabajando en un pequeño proyecto para mí en este momento y lo estoy usando como una oportunidad para familiarizarme con las pruebas unitarias y mantener la documentación adecuada.JUnit Método de prueba con naturaleza aleatoria
Tengo una clase Deck
con una baraja de cartas (es muy simple y, para ser honesto, puedo estar seguro de que funciona sin una prueba unitaria, pero como dije, me estoy acostumbrando a usar pruebas unitarias) y tiene un método shuffle()
que cambia el orden de las cartas en el mazo.
La aplicación es muy simple y sin duda trabajar:
public void shuffle()
{
Collections.shuffle(this.cards);
}
Pero, ¿cómo podría aplicar una prueba de unidad para este método. Mi primer pensamiento fue verificar si la carta superior del mazo era diferente después de llamar al shuffle()
, pero por supuesto existe la posibilidad de que sea lo mismo. Mi segundo pensamiento fue verificar si todo el orden de las tarjetas ha cambiado, pero de nuevo podrían estar en el mismo orden. Entonces, ¿cómo podría escribir una prueba que garantice que este método funcione en todos los casos? Y, en general, ¿cómo pueden los métodos de prueba unitaria para los cuales el resultado depende de alguna aleatoriedad?
Saludos,
Pete
Desde una perspectiva lógica, se consideraría sus cartas barajadas si el pedido es lo mismo? –
Para su última pregunta, vea http://stackoverflow.com/questions/122741/testing-for-random-value-thoughts-on-this-approach. También creo que D. Knuth tiene un capítulo entero al respecto. – ewernli
Creo que tiene sentido que el mazo se considere barajado si las cartas permanecen en el mismo orden y se han producido algunos reordenamientos, aunque es poco probable que sea posible barajar un mazo de cartas real en el mismo orden en el que estaban originalmente en. – Peter