Pergunta
O teste de unidade é, grosso modo, testar bits do seu código isoladamente com o código de teste.As vantagens imediatas que vêm à mente são:
- A execução dos testes torna-se automatizável e repetível
- Você pode testar em um nível muito mais granular do que o teste apontar e clicar por meio de uma GUI
Minha pergunta é: quais são as "melhores práticas" atuais em termos de ferramentas, bem como quando e onde usar testes unitários como parte de sua codificação diária?
Vamos tentar ser um tanto agnósticos quanto à linguagem e cobrir todas as bases.
Solução
Ok, aqui estão algumas práticas recomendadas de alguém que não faz testes unitários tanto quanto deveria... tosse.
- Certifique-se de que seus testes testem umcoisa e apenas uma coisa.
- Escreva testes de unidade conforme você avança.Preferencialmente antes você escreve o código que está testando.
- Não faça testes de unidade na GUI.
- Separe suas preocupações.
- Minimize as dependências dos seus testes.
- Comportamento simulado com zombarias.
Outras dicas
Você pode querer dar uma olhada TDD em três cartões de índice e Três fichas para lembrar facilmente a essência do desenvolvimento orientado a testes:
Cartão nº 1.As três leis do tio Bob
- Não escreva nenhum código de produção, exceto para passar em um teste com falha.
- Escreva apenas o suficiente de um teste para demonstrar uma falha.
- Escreva apenas código de produção suficiente para passar no teste.
Cartão nº 2:PRIMEIROS Princípios
- Rápido:Extremamente rápido, centenas ou milhares por segundo.
- Isolado:O teste isola claramente uma falha.
- Repetivel:Posso executá-lo repetidamente e ele será aprovado ou reprovado da mesma maneira todas as vezes.
- Autoverificação:O teste é inequivocamente aprovado-reprovado.
- Oportuno:Produzido em sincronia com pequenas alterações de código.
Cartão nº 3:Núcleo do TDD
- Vermelho:teste falha
- Verde:testes aprovados
- Refatorar:limpar código e testes
O assim chamado xUnidade estrutura é amplamente utilizada.Ele foi originalmente desenvolvido para Smalltalk como SUnit, evoluiu para JUnit para Java e agora possui muitas outras implementações, como NUnit para .Net.É quase um padrão de fato - se você disser que está usando testes de unidade, a maioria dos outros desenvolvedores presumirá que você se refere ao xUnit ou similar.
Um excelente recurso para 'melhores práticas' é o Blog de testes do Google, por exemplo, uma postagem recente em Escrevendo código testável é um recurso fantástico.Especificamente, as postagens semanais da série 'Testando no banheiro' são ótimas para postar em torno de seu cubo ou banheiro, para que você possa sempre pensar em testar.
A família xUnit é a base dos testes unitários.Eles são integrados a Netbeans, Eclipse e muitos outros IDEs.Eles oferecem uma solução simples e estruturada para testes unitários.
Uma coisa que sempre tento fazer ao escrever um teste é minimizar o uso de código externo.Com isso quero dizer:Tento minimizar o máximo possível o código de configuração e desmontagem do teste e tento evitar o máximo possível o uso de outros módulos/blocos de código.Código modular bem escrito não deve exigir muito código externo em sua configuração e desmontagem.
NUnit é uma boa ferramenta para qualquer uma das linguagens .NET.
Os testes unitários podem ser usados de diversas maneiras:
- Lógica de teste
- Aumente a separação de unidades de código.Se você não puder testar completamente uma função ou seção de código, então as partes que a compõem são muito interdependentes.
- Impulsione o desenvolvimento, algumas pessoas escrevem testes antes eles escrevem o código a ser testado.Isso força você a pensar sobre o que deseja que o código fazer, e, em seguida, fornece uma orientação definitiva sobre quando você conseguiu isso.
Não se esqueça do suporte à refatoração.O ReSharper no .NET fornece refatoração automática e correções rápidas para código ausente.Isso significa que se você escrever uma chamada para algo que não existe, o ReSharper perguntará se você deseja criar a peça que falta.