Pergunta

Eu faço TDD, e tenho sido bastante frouxa em organizar meus testes de unidade. I tendem a começar com um arquivo que representa a próxima história ou pedaço de funcionalidade e escrever todas as unidades-testes para fazer esse trabalho.

É claro que, se eu estou introduzindo uma nova classe, eu costumo fazer um módulo de teste de unidade separada ou arquivo para essa classe, mas não se organizam os testes em qualquer estrutura de nível superior. O resultado é que eu escrever código rápido e eu acredito que meu programa real é razoavelmente bem estruturado, mas os testes da unidade em si são "confuso". Especialmente, a sua estrutura tende para recapitular a filogenia do processo de desenvolvimento. Às vezes eu me vejo como negociação preguiça no código para a preguiça nos testes.

Como grande problema a é essa? Quem aqui continuamente refatora e reorganiza seus testes de unidade para tentar melhorar a sua estrutura global? Alguma dica para isso? O que a estrutura geral de testes deve ser parecida.

(Note, que eu não sou muito de fazer a pergunta "quantas afirmações por função", perguntou aqui: Quantos testes de unidade que eu deveria escrever por função / método? Eu estou falando sobre a foto maior.)

Foi útil?

Solução

Divida seus testes em 2 jogos:

  • testes funcionais
  • testes
  • unidades

Testes funcionais são história por usuário. Os testes unitários são por classe. O ex-cheque que você realmente apoiar a história, o último exercício e documentar a sua funcionalidade.

Há uma Directory (pacote) para testes funcionais. Testes de unidade devem ser estreitamente ligado com a funcionalidade exercem (então eles estão espalhados). Você movê-los e refazer-los como você se move e refatorar seu código ao redor.

Outras dicas

A parte menos importante está a organizar os testes.

I começar por colocar os ensaios em uma classe que se relaciona com a classe em teste, de modo com.jeffreyfredrick.Foo tem um com.jeffreyfredrick.FooTest teste. Mas se algum subconjunto dessas classes precisa de uma configuração diferente, então eu vou movê-los em sua própria classe de teste. Eu coloquei meus testes em um diretório de origem separado, mas mantê-los no mesmo projeto.

A parte mais importante é refatoração os testes.

Sim eu tento e refatorar meus testes como eu ir. O objetivo é remover a duplicação, enquanto ainda permanecem declarativa e fácil de ler. Isto é verdade tanto dentro das classes de teste e em todas as classes de teste. Dentro de uma classe de teste que eu poderia ter um método parametrizada para criar um falso teste (simulada ou esboço). Meus falsificações de teste são geralmente classes internas dentro de uma classe de teste, mas se eu perceber que não há necessidade eu vou puxá-los para fora para reutilização em testes. Eu também vou criar uma classe TestUtil com métodos comuns quando parece apropriado.

Eu acho refatoração testes seu é importante para o sucesso a longo prazo dos testes de unidade em grandes projetos. Você já ouviu pessoas reclamando sobre como os testes são muito frágeis ou impedindo-os de mudança? Você não quer estar em uma posição onde a mudar o comportamento de um meio classe fazendo dezenas ou mesmo centenas de alterações nos seus testes. E, assim como com o código, você conseguir isso através refatoração e manter os testes limpo.

testes são código.

Eu escrevo uma classe de teste de unidade para cada classe na aplicação, e manter as classes de teste organizados na mesma estrutura de pacotes como as classes em teste.

Dentro de cada classe de teste eu realmente não têm estrutura muito organizacional. Cada um tem apenas um punhado de métodos para cada método público da classe em teste, então eu nunca tive qualquer problema em encontrar o que estou procurando.

Para cada classe no software, eu manter uma classe de teste de unidade. As classes de teste unidade de seguir a mesma hierarquia de pacote como as classes que são testados.

Eu mantenho o meu código de teste de unidade em um projeto separado. Algumas pessoas também preferem manter seu código de teste no mesmo projeto em um diretório de origem separado chamado 'teste'. Você poderia seguir o que se sente confortável para você.

Eu tento olhar para os testes de unidade como um projeto por conta própria. Como em qualquer projeto a organização deve seguir uma lógica interna. No entanto, não tem que ser específica ou formalmente definida -. Qualquer coisa que você está confortável com é OK, desde que ele mantém o seu projeto bem organizado e limpo

Assim, para os testes de unidade I geralmente quer seguir a estrutura do código projeto principal ou o foco (por vezes quando as chamadas situação dele) sobre as áreas funcionais vez.

Deixando-los em uma pilha é como você pode imaginar confuso e difícil de manter

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