Pergunta

Eu tenho 2 perguntas sobre a organização de testes de unidade.

  1. Eu tenho que colocar teste para o mesmo pacote como classe testado, ou posso organizar testes em diferentes pacotes?

    Por exemplo, se eu tenho de validade e outros testes, é correto dividi-los em diferentes pacotes, mesmo se eles são para mesma classe?

  2. O que sobre as aulas simuladas e stub? Devo separá-los de pacotes contendo apenas testes, ou colocá-los juntos?

Foi útil?

Solução

A forma como fazemos nossos casos de teste JUnit é colocá-los no mesmo pacote, mas em um diretório raiz diferente. Desde que nós usamos Maven, é só usar as localizações padrão tornando a estrutura semelhante à seguinte.

src/main/java/com/foo/Bar.java
src/test/java/com/foo/BarTest.java

Obviamente há muito mais para a estrutura, mas isso nos permite construir os testes separadamente do código de linha principal, mas ainda acessar classes protegidas e afins. Com relação aos diferentes tipos de testes, isso é muito subjetivo. Quando começamos o nosso esforço de teste (que infelizmente começou após o desenvolvimento), eu tentei manter as coisas muito isoladas. Infelizmente, rapidamente se tornou um pesadelo quando chegamos ao ponto caso 500+ teste. Eu já tentei fazer mais consolidação. Isso levou a quantidades reduzidas de código para manter. Como eu disse, porém, é muito subjetivo.

Quanto código só-teste, nós mantê-lo em um pacote com.foo.test separado que reside apenas na árvore src/test/java.

Outras dicas

Eu também tendem a colocar meus testes no mesmo pacote, mas sob um diretório raiz diferente. Isso me permite testar classes de pacotes-privadas ou de acesso aulas de embalagem-privada ao testar algo mais no pacote. Eles são mantidos em uma árvore de diretórios separado para permitir excluindo-os do resultado implantado (em particular para garantir que o código de teste não acidentalmente entrar no código de produção). O que mais importa, no entanto, é o que funciona para a sua situação.

Em termos de quantas classes de teste por classe de produção, a teoria que eu vi é que você escrever uma classe de teste por dispositivo elétrico, que é por estrutura de configuração. Em muitos casos, que é o mesmo (ou quase o suficiente) para uma classe de teste por classe de produção, mas que têm, por vezes escrito mais classes de teste (em particular a igualdade ensaios tendem a ser separados) para uma classe de produção elasticidade, e ocasionalmente de classe um teste de para um grupo de classes (relacionados) de produção (por exemplo, para testar o padrão Strategy).

Na maior parte, eu não me preocupo muito com a teoria, mas refazer os testes conforme necessário para manter a duplicação a um mínimo absoluto.

As classes de teste deve ser bastante em diferentes pacotes, é mais fácil para separá-los a partir do código de produção quando você empacotá-lo para a liberação. Eu costumo manter os lotes de fluff teste nesses pacotes, todos os tipos de simulações, configurações, cenários .. Mas quando você construir - não obtê-lo. Em algumas situações, é uma boa idéia para manter o seu material de teste mesmo em diferentes projetos. Depende.

Mantendo o mesmo pacote permite que você use a visibilidade pacote-privadas para o código que se destina a ser acessado via apenas o teste.

No que diz respeito usando diretórios raiz separados, que é uma boa prática. Ele também tem uma vantagem para nós, já que usar IDEA, IDEA reconhece que o código de produção não pode código de teste de referência.

Em termos de mantê-los separados, há um grande poder em ter um, e apenas um, classe de teste por classe de produção no nível da unidade. Claro, algumas classes são criados na produção como parte de refatoração que não têm classes de teste em tudo, e isso é bom, mas quando você quer saber o que teste verifica uma certa classe, tendo uma convenção que diz ClassNameTest é os testes para ClassName é muito útil.

TestNG é muito mais amigável para este paradigma de JUnit, no entanto.

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