Considere um método para embaralhar aleatoriamente elementos em uma matriz. Como você escreveria um teste de unidade simples, porém robusto, para garantir que isso funcione?
Eu vim com duas idéias, ambas com falhas visíveis:
- Embaralhe a matriz e verifique se a ordem é diferente da anterior. Isso soa bem, mas falha se o embaralhar na mesma ordem. (Improvável, mas possível.)
- Embaralhe a matriz com uma semente constante e verifique-a com a saída predeterminada. Isso depende da função aleatória sempre retornando os mesmos valores, dada a mesma semente. No entanto, isso às vezes é uma suposição inválida .
Considere uma segunda função que simula a rolagem de dados e retorna um número aleatório. Como você testaria essa função? Como você testaria se a função ...
- nunca retorna um número fora dos limites especificados?
- retorna números em uma distribuição válida? (Uniforme para um dado, normal para um grande número de dados.)
Estou procurando respostas que ofereçam informações sobre o teste não apenas desses exemplos, mas de elementos aleatórios do código em geral. Os testes de unidade são a solução certa aqui? Caso contrário, que tipo de testes são?
Só para facilitar a mente de todos, não estou escrevendo meu próprio gerador de números aleatórios.