Ao testar unidades, muitas vezes me pego debatendo quanto dos dados alimento e espero voltar das minhas unidades em teste, devo incluir nos arquivos de teste reais.
A desvantagem com a qual estou constantemente lutando é:
- Se uma grande parte do teste (em volume de código) consiste em dados de entrada e saída, parece difícil ler o teste, mas posso ver facilmente as entradas e saídas reais.
- Se eu carregar os dados de teste dos arquivos, posso testar facilmente várias variações de possíveis entradas de dados, reutilizar facilmente os dados de teste para vários testes, mas tenho que deixar o código fonte para procurar outro arquivo para ver exatamente quais são as entradas. .
Qualquer um destes é um antipadrão?
unit-testing
anti-patterns
unit-test-data
DudeOnRock
fonte
fonte
Respostas:
Para responder sua pergunta diretamente - não, não acredito que seja um anti-padrão quando usado corretamente.
--- Resposta mais detalhada ---
Pela minha experiência, acho que isso depende muito do objetivo do seu teste. Aqui está a regra prática que usei no passado e me ajudou a decidir:
Você está realmente testando uma pequena unidade de código? (Um verdadeiro teste de unidade)
Se sim, descobri que é muito mais fácil criar os dados dentro do próprio teste exatamente porque consigo ver o que está sendo passado. Nesses casos, geralmente procurarei uma biblioteca semelhante ao Jasmine para usar, porque acho que facilita a criação e a manutenção dos dados de teste. Essa é uma preferência pessoal - use o que facilitar o seu trabalho.
Se não, então provavelmente você está testando o próprio sistema. Nesses casos, eu frequentemente carrego dados de uma fonte externa, sendo os motivos aqui:
Resposta longa, curta, depende do que você está testando e por quê. Ambas as abordagens são úteis e têm seu lugar - escolha o que funciona melhor para sua situação.
fonte
Não vejo uma troca aqui. O código-fonte deve descrever algoritmos, ou pelo menos lógica de negócios, não grandes quantidades de dados. Se você escreve uma transformação de Fourier, deseja verificar se um tom de sinusite está corretamente mapeado para um único pico, um som misto para mais picos etc., mas para isso é completamente suficiente alimentar um arquivo nomeado
sinus.wav
na rotina e verificar se a estrutura de saída é o que você espera.Claro, tecnicamente você não tem uma garantia imediata de que
sinus.wav
realmente contém um tom sinusal, mas como você disse, listar os 100.000 valores de amplitude na fonte também não fornece isso - na verdade, é pior , porque você pode pelo menos reproduzir um arquivo externo com um reprodutor de áudio para verificar, enquanto os valores de dados enterrados no código-fonte são essencialmente impossíveis de se fazer.fonte