Acho que você está confundindo testes de unidade com testes baseados em propriedade em sua pergunta.
Testes de unidade olham para uma classe como se ela fosse uma unidade de processamento em uma cadeia de processamento de sinal , como um circuito amplificador ou um rack de efeitos de guitarra. Acho que Kent Beck usou exatamente essa metáfora em seu trabalho " Desenvolvimento Orientado a Testes: Por Exemplo ", mas neste momento não tenho uma cópia do livro para verificar.
O ponto é explicar que é mais fácil verificar se um certo filtro sempre retira freqüências altas, do que verificar se uma combinação específica de muitos filtros e distorções faz com que você soe exatamente como Jimi Hendrix.
Aplicado ao seu caso, você pode querer testar em um teste de unidade que uma classe List
pode add
elementos conforme necessário. Sendo rigoroso com a filosofia TDD, você deve providenciar que o List
já tenha um número aleatório de elementos antes de adicioná-lo - caso contrário, uma implementação mínima pode saber o número total esperado e retornar .
Por outro lado, o
teste baseado em propriedade , verifica que uma função é matematicamente bem definida no sentido de que retorna o que é esperado para todo o domínio onde ela está definida (a definição aqui é meu e pode ser impreciso). Você pode ter uma idéia de como isso funciona lendo em
QuickCheck e
ScalaCheck .
O conceito central é que, se você passar para a estrutura de teste, uma função que tenha uma assinatura digitada, por exemplo, sum(one: Int, another: Int)
, então o framework gera muitos testes percorrendo todas as variações possíveis do tipo . No sum
example, Int
vai de Int.MinValue
a Int.MaxValue
: o framework escolhe, digamos, 100 pares de valores e tenta sum
deles. Para classes mais complexas, você pode precisar dizer ao framework como criar uma instância Arbitrária de sua classe.
Aplicado ao seu caso, você pode querer mostrar que length
do seu List
é sempre aumentado em um após a operação add
. Defina uma Lista Arbitrária como uma Lista que já contém um número aleatório de itens e defina que, após um add
, esse número seja aumentado em 1.
O principal benefício do teste baseado em propriedade é que você obtém um lote de testes escrito automaticamente para você, e você pode até controlar a geração para procurar por casos extremos. O teste baseado em propriedade gerará 100 listas e verificará se a invariante é válida; O teste unitário teria de ser repetido 100 vezes para lhe dar uma garantia. No entanto, o teste baseado em propriedade não é uma bala de prata, é apenas um complemento para testes de unidade em determinadas situações.