BIGtheme.net http://bigtheme.net/ecommerce/opencart OpenCart Templates
19/10/2017 - 7:12 AM

APRENDA A CATEGORIZAR TESTES COM JUNIT (Autor: Elias Nogueira)

É comum ter dúvidas de como organizar os nossos testes para execução. Quem utiliza o JUnit como apoio a automação de teste (com Selenium e Appium, por exemplo ou com qualquer outra ferramenta) pode usar um recurso do próprio JUnit para isso.

O que são as Categorias no JUnit

É uma anotação no JUnit que categoriza e organiza um teste. Isso nos dá o poder de escolher quais testes serão ou não serão executados dado uma categoria.

Esta funcionalidade foi incluída no JUnit 4.8, consistindo em 4 anotações

Anotação Descrição
@Category Identifica uma categoria em um teste. Obrigatoriamente deve ser adicionado aos métodos de teste, ou seja, aqueles que tem o @Test
@IncludeCategory Inclui uma ou mais categorias em uma suíte de teste
@ExcludeCategory Exclui uma ou mas categorias em uma suíte de teste
@RunWith(Categories.class) Informa a uma suíte de teste que a execução será feita através de Categorias

Como criar uma Categoria?

A criação da Categoria é simples, mas primeiros temos uma pré condição: ela só pode ser adicionada nos métodos de teste (os que possuem a anotação @Test)

A Categoria é uma Interface em Java, logo para criar uma categoria temos que criar uma interface com o nome que desejarmos. Este nome da interface será o identificador da Categoria.

Nota: uma interface em Java é criada através da palavra-chave interface (veja a imagem abaixo)

No exemplo abaixo temos três interfaces, que compõem as seguintes categorias (com o intuito de aprendizado):

  • SmokeTests: testes prioritários (sem estes testes sabemos que a aplicação não está funcionando como deveria)
  • TestesPositivos: testes que sempre refletem a utilização correta do requisito/funcionalidade. São os casos de sucesso.
  • TestesNegativos: testes que sempre refletem a utilização negativa do requisito/funcionalidade. São os casos de erro (mas erros esperados).

Como categorizar meu teste (aplicar uma categoria criada)?

Depois de ter criado a(s) Categoria(s) precisamos inseri-la nos testes que desejarmos. Há duas formas de fazer esta inserção como mostra a tabela abaixo.

Forma Descrição Exemplo
Inserir apenas uma Categoria Adicionar o nome da Categoria entre parênteses, seguida pelo .class @Category(TestesPositivos.class)
Inserir mais de uma Categoria Adicionar dentro do parênteses um abrir e fechar chaves ( { } ) e, dentro da chaves colocar o nome da Categoria. Para adicionar a próxima é necessário adicionar uma vírula @Category( { SmokeTests.class, TestesPositivos.class } )

Lembre-se que a Categoria será adicionada logo depois do @Test. Abaixo estão os exemplos com apenas uma Categoria e com mais de uma categoria.

Como executar uma (ou mais) Categorias?

Para executar especificamente na categoria é necessário criar uma Suíte de Teste no JUnit. A explicação abaixo da criação da Suíte de Teste serve apenas para a execução de Categorias.

Será necessário adicionar três informações a nossa Suíte de Teste (que será uma classe sem nenhum conteúdo):

  • Anotação @RunWith informando que executaremos apenas Categorias
  • Anotação @IncludeCategory para incluir as Categorias ou @ExcludeCategory para excluir as Categorias da execução (explicação logo abaixo)
  • Anotação @SuiteClasses com as classes/scripts que serão executados
@RunWith

Esta anotação informará à suíte como/por quem ela será executada. Como estamos falando de Categorias colocaremos como parâmetro a classeCategories.class

@IncludeCategory

Sempre que desejarmos incluir uma categoria na execução usaremos esta anotação. A suíte passa a executar somente a(s) Categoria(s) que estiver(em) informada(s).

Se incluirmos apenas uma Categoria basta colocar o nome da Categoria como parâmetro. Se incluirmos mais de uma Categoria, devemos coloca-las separadas por vírgula, dentro de chaves.

Assim a suíte irá executar somente os testes que possuírem aquelas Categorias identificadas.

@ExcludeCategory

Sempre que desejarmos excluir uma categoria na execução usaremos esta anotação. A suíte passa a executar somente a(s) Categoria(s) que não estiver(em) informada(s).

Se desejarmos excluir apenas uma Categoria basta colocar o nome da Categoria como parâmetro. Se desejarmos excluir mais de uma Categoria, devemos coloca-las separadas por vírgula, dentro de chaves.

Assim a suíte irá executar somente os testes que possuírem aquelas Categorias identificadas.

@SuiteClasses

Informamos a suíte quais classes/scripts serão executados. Os testes destas classes/suítes serão executados de acordo com o @IncludeCategory ou@ExcludeCategory.

Se desejarmos incluir apenas uma classe/script basta colocar o nome dele como parâmetro. Se desejarmos incluir mais de uma classe/script, devemos coloca-las separadas por vírgula, dentro de chaves.

Exemplo

Abaixo temos um exemplo a suíte Smoke_Tests que incluiu as classes TesteLogin e TesteProduto na execução para a categoria SmokeTest

Agora dê uma olhada nas classes TesteLogin e TesteProduto

Notem que o resultado de cada teste é escrever o nome da método dele próprio.

O que será escrito na execução desta suíte? Dê uma olhada na imagem abaixo:

Como a suíte incluiu apenas a Categoria SmokeTests apenas o teste loginComSucesso da classe TesteLogin e pesquisarProduto da classe TesteProdutoforam executadas.

Como posso aplicar a Categoria nos meus testes do dia a dia?

Se você utiliza o JUnit como apoio a criação de scripts de testes desenvolvidos em Java você pode utilizá-lo com qualquer ferramenta/api de desenvolvimento de testes em qualquer nível. Por exemplo:

  • Na utilização do RestAssured para categorizar as execuções dos testes para uma API Rest
  • Na utilização do Selenium WebDriver para categorizar as execuções dos testes para uma página web
  • Na utilização do próprio JUnit para categorizar as execuções de testes unitários
  • Na utilização do Appium para categorizar as execuções de testes para dispositivos móveis

Projeto no GitHub

No GitHub da Qualister há um projeto de exemplo. Este projeto serve como exemplo e referência pra você 🙂

https://github.com/qualister-consultoria/categoria…

Desafio

Crie um projeto ou mesmo analise as classes de teste e responda como será a execução destas suítes de teste:

  • Suite_TestesNegativos: inclui as classes TesteLogin e TesteProdutos e possui um @IncludeCategory para a categoria TestesNegativos
  • Suite TestesPositivos: inclui as classes TesteLogin e TesteProdutos e possui um @IncludeCategory para a categoria TestesPositivos e um@ExcludeCategory para a categoria SmokeTests

Estas mesmas suítes já estão prontas no GitHub do projeto.

Até a próxima!

Autor: Elias Nogueira
Fonte: http://www.qualister.com.br/blog/aprenda-a-categorizar-testes-com-junit

Sobre Luiz Lohn

Luiz Lohn
Mobile QA Engineer, trabalha há mais de 4 anos com qualidade e teste de software. Atualmente na SocialBase trabalha com automação e testes manuais de Aplicativos Móveis. Fundador do site QUATEST e coordenador do GUTS-SC

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *