Eu não acho que os testes unitários sejam a ferramenta certa para testar a aleatoriedade. Um teste de unidade deve chamar um método e testar o valor retornado (ou estado do objeto) em relação a um valor esperado. O problema com o teste de aleatoriedade é que não há um valor esperado para a maioria das coisas que você gostaria de testar. Você pode testar com uma determinada semente, mas isso só testa a repetibilidade . Ele não te dá nenhuma maneira de medir quão aleatória a distribuição é, ou se é aleatória mesmo.
Felizmente, existem muitos testes estatísticos que você pode executar, como a Bateria obstinada de testes de aleatoriedade . Veja também:
-
Como testar a unidade de um gerador de números pseudo-aleatórios?
- Steve Jessop recomenda que você encontre uma implementação testada do mesmo algoritmo RNG que esteja usando e compare sua saída com as sementes selecionadas contra sua própria implementação.
- Greg Hewgill recomenda o ENT conjunto de testes estatísticos.
- John D. Cook encaminha os leitores ao seu artigo CodeProject
- Várias pessoas recomendam testar se a distribuição dos números gerados é uniforme, o teste qui-quadrado e testar se a média e o desvio padrão estão dentro do intervalo esperado. (Observe que testar a distribuição sozinha não é suficiente. [1,2,3,4,5,6,7,8] é uma distribuição uniforme, mas certamente não é aleatória.)
-
Teste de unidade com funções que retornam resultados aleatórios
- Brian Genisio aponta que zombar de seu RNG é uma opção para tornar seus testes repetíveis e fornece código de amostra C #.
- Novamente, várias outras pessoas apontam o uso de valores fixos de sementes para repetibilidade e testes simples para distribuição uniforme, qui-quadrado, etc.
-
Aleatoriedade de Testes Unitários é um artigo wiki que fala sobre muitos dos desafios já abordados ao tentar testar o que é, por sua natureza, não repetível. Um detalhe interessante que eu aprendi foi o seguinte:
I've seen winzip used as a tool to measure the randomness of a file of values before (obviously, the smaller it can compress the file the less random it is).