BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Categorizando testes com Junit 4.8

Categorizando testes com Junit 4.8

É bastante comum existir testes de diversas categorias em um projeto, testes de integração e testes unitários são as categorias mais comuns. Necessita-se, em alguns casos, que seja feita uma categorização destes testes, diferenciando um dos outros, seja no modo de rodar ou mesmo nas características peculiares dos mesmos. A nova versão do Junit 4.8 faz com que isso seja feito de uma forma natural e fácil.

Por que?

Muitas vezes precisamos, principalmente quando utilizamos uma ferramenta de integração contínua, criar fases para os nossos testes, rodando primeiro os de uma determinada categoria e depois os de outra.

Como?

Para diferenciar as diferentes categorias de testes, antes da versão 4.8 do JUnit, possuiamos duas formas:

  • Criar os testes em diretórios diferentes, testes de integração podem ficar em /tests/integration e unitarios em /tests/unit.
  • Adicionar um sufixo comum(convenções) para os testes de determinada categoria, como: AlunoIntegrationTest

Pensando em facilitar a vida e também fazer o que outros frameworks como o TestNG já fazia, o Junit 4.8 decidiu implementar um controle de categorias, isto é, agora você pode categorizar os seus testes e depois rodar apenas aqueles da categoria desejada. Para utilizar essas vantagens você precisa utilizar o JUnit na versão 4.8.x. Além de também possuir a vatntagem de rodar seus testes através de suites. A primeira coisa que se deve fazer é criar interfaces que representem as Categorias desejadas.

public interface TesteDeIntegracao {}

Após criar sua categoria é necessário que você adicione a mesma em seu teste.

@Category(TesteDeIntegracao.class)
public class UsuarioTest {

    @Test
    public void deveRemoverOUsuario() {
        ...
    }

    @Test
    public void deveAdicionarOUsuario() {
        ....
    }
}

Você também pode categorizar o método de teste e não a classe:

public class AlunoTest {

    @Test
    @Category(TesteDeIntegracao.class)
    public void deveRemoverOAluno() {
        ...
    }

    @Test
    public void deveAdicionarOAluno() {
        ....
    }
}

Rodando os Testes

Após categorizar, precisamos rodar os nossos testes e os mesmos devem rodar conforme a categoria solicitada. Para fazer isso é necessário criar uma suite de testes e nela adicionar as categorias que envolvem os testes, para dizer que você quer rodar os testes utilizando uma determinada categoria, basta que sua suite contenha a anotação @RunWith(Categories.class) e que você adicione as categorias com @IncludeCategory.

Lembrando que apartir do JUnit 4.8 uma suite de testes nada mais é do que uma classe vazia onde você coloca uma anotação @SuiteClasses e inclui as classes que possuem determinados testes dentro dela.

@RunWith(Categories.class)
@IncludeCategory(TestesDeIntegracao.class)
@SuiteClasses( { AlunoTest.class, UsuarioTest.class })
public class rodaTestesDeIntegracaoSuite {}

Você também pode rodar seus testes excluindo categorias que não serão consideradas utilizando a anotação @ExcludeCategory. Abaixo uma classe que rodaria apenas todos os testes que não são de integração.

@RunWith(Categories.class)
@ExcludeCategory(TesteDeIntegracao.class)
@SuiteClasses( { AlunoTest.class, UsuarioTest.class })
public class TestesUnitariosSuite {}

Agora basta você fazer com que sua task do ANT, por exemplo, rode suas suites individualmente. Muito mais simples do que ter que adicionar classe por classe em sua suite, não acha?

Uma critíca vista na comunidade é o fato de ser possível rodar os testes categorias apenas em suites, não sendo possível rodar os mesmos de outra forma. Porém este não deve ser um grande impedimento já que em futuras versões isso será implementado, visto que os outros frameworks, como o TestNG já possui grupos, o que podem ser útil quando se utiliza o Maven com o plugin Surefile para rodar os testes.

E você leitor, o que achou dessa novidade? Quais outras utilidades você vê para a utilização das categorias? Você utilizaria as categorias mesmo com a limitação de rodar apenas em suites de teste?

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT