Pergunta

Eu estou trabalhando em um projeto PHP com cobertura em testes de unidade sólida.

Eu tenho notado, que da última vez, eu estou fazendo manipulações muito complicado com Command-Line Test Runner testa unidade' -. Filtro Comando

Aqui está a explicação deste comando da documentação oficial:

- Filtro

Apenas executa testes cujo nome corresponde ao padrão determinado. O padrão pode ser o nome de um único teste ou uma expressão regular que corresponde a vários nomes de teste.

Eu ofter usá-lo porque, por vezes, torna-se muito útil para executar apenas um conjunto de testes simples ou caso de teste de toda a base de teste.

Eu estou querendo saber se isso é uma boa prática ou não?

Ouvi dizer que às vezes é uma boa prática para executar toda a suíte de testes em sua máquina de integração contínua, se você sabe com certeza que você tenha modificado apenas um componente e 100% por cento confiante , que não deixará de unidade-testes do outro componente. O que você acha sobre isso?

Algum tempo atrás eu pensava que não devemos nos preocupar tanto sobre o tempo precisa para executar todo o conjunto de todas as unidades-testes, mas quando você tem muito complicada lógica de negócios e unidade-testes -. Isso pode levar um tempo significativo

Eu entendo, que "reais" unidade-testes não devem interagir com DB, o uso de simulação / stubs objetos, eu concordo com isso. Mas, às vezes, é muito mais fácil (mais barato) para usar luminárias DB para os testes.

Por favor me dê alguns conselhos, como este problema pode ser resolvido?

Foi útil?

Solução

testes de unidade bom deve:

  • têm nomes métodos claros e nomes de variáveis ??para atuar como documentação
  • Executar rápido. Isso também será possível para o teste com o negócio complicado lógica. Teste deve ser executado em uma avarage tempo de algo em torno de 0,1 segundo.
  • Test exatamente uma coisa em um método de teste
  • Não se integrar com recursos externos, como o sistema de arquivos, e-mail, bases de dados, webservices, e todo o resto. Você pode criar testes de integração de banco de dados separado para testar sua ineraction banco de dados. Estes testes serão mais lento, em seguida, a sua unidade testar a maior parte do tempo. eu coloquei Meu testes de integração em um independentes projeto e eu executá-los somente quando estou trabalhando no código de integração. Eu também executá-los em todas as compilações na CI servidor.
  • estar completamente isolados uns dos outros. Quando você tem testes de função no outro, você não pode ver o que seu problema é de leitura que testes são falhou. Você pode ter que depurar para encontrar o problema. Isolado testes você vai economizar muito tempo.

Pessoalmente, eu não uso nomes de categoria em meus testes. Uso 2 projectos de ensaio por aplicação. Um para o teste de unidade e um para os testes de integração e testes mais lentas.

Reação em:

"Mas, às vezes, é muito mais mais fácil (mais barato) para usar dispositivos elétricos dB para os testes. "

Quando seu código é bem escrito, será mais fácil para zombar. Eu não sei sobre zombando de estruturas em PHP, mas eu usá-los em outros idiomas para me salvar um monte de tempo. Escrevendo primeiro teste e código mais tarde pode ajudá-lo a projetar seu código para ser testável mais fácil.

Pessoalmente eu aprendi a teste melhor por

  • ler blogs sobre o assunto
  • leitura de livros sobre o assunto
  • leitura de código testado escrito por outros
  • escrevendo um monte de testes, é claro. Levei alguns thousends de testes para se tornar bom nisso.

Outras dicas

Eu ofter usá-lo porque, por vezes, torna-se muito útil para executar apenas um conjunto de testes simples ou caso de teste de toda a base de teste.

Eu estou querendo saber se isso é uma boa prática ou não?

Claro, contanto que você executar o conjunto completo de unidade-testes ocasionalmente (através de um CI sons servidor perfeito)

Realização dos testes "interessantes" regularmente é melhor do que correr todos os testes raramente ..

Eu resolver a questão por ter um subconjunto de testes ( "testes de fumo") que levam 1 minuto ou menos que deve ser executado antes de cometer, em seguida, executar o conjunto completo de testes de seu CI servidor.

Se o seu conjunto completo de testes leva> 15 minutos, em seguida, eu olharia para dividi-los e executá-los em paralelo.

Em seguida, você pode usar o --filter para executar os testes que você está mais interessado em primeiro lugar, então a fumaça testa antes de cometer, e ter o resto correr a partir do servidor de CI.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top