TestNG na Prática – Criando Testes com Java

Compartilhar:

O TestNG é um framework de testes inspirado no JUnit e NUnit, mas que introduz várias novas funcionalidades que o tornam mais poderoso e fácil de usar.

Este artigo detalha essas funcionalidades, fornecendo uma visão detalhada de como o TestNG aprimora o processo de testes para desenvolvedores.

Principais Funcionalidades do TestNG

Anotações

O TestNG utiliza anotações para definir métodos de teste, métodos de configuração e fornecedores de dados. Isso permite uma estrutura de teste mais flexível e legível em comparação com abordagens tradicionais que dependem fortemente de herança e interfaces.

Capacidades de Multithreading

O TestNG suporta a execução de testes em pools de threads com várias políticas. Isso significa que você pode executar cada método de teste em sua própria thread, atribuir uma thread por classe de teste ou escolher outras políticas de threading, melhorando o desempenho e a eficiência dos testes, especialmente para grandes conjuntos de testes.

Testes de Segurança para Multithreading

O framework permite testar se seu código é seguro para multithreading, ajudando a garantir que suas aplicações possam lidar com execução concorrente sem problemas.

Configuração Flexível de Testes

O TestNG oferece um sistema de configuração altamente flexível. Você pode configurar diferentes parâmetros nos níveis de suite, teste e método, permitindo um controle preciso sobre a execução dos testes.

Testes Baseados em Dados com @DataProvider

Uma das funcionalidades mais destacadas do TestNG é o suporte para testes baseados em dados. Usando a anotação @DataProvider, você pode definir métodos que fornecem dados para seus métodos de teste, permitindo executar o mesmo teste com múltiplos conjuntos de dados de forma eficiente.

testng

Exemplo de Uso do TestNG

Abaixo, separamos alguns exemplos simples para ilustrar como usar o TestNG:

Baixando e Construindo o TestNG. Para usar a versão mais recente do TestNG, adicione a seguinte dependência ao seu pom.xml do Maven:

<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.9.0</version>
    <scope>test</scope>
</dependency>

Para Gradle, adicione:

dependencies {
    testCompile 'org.testng:testng:7.9.0'
}

Você também pode construir o TestNG a partir do código-fonte. Clone o repositório e execute os seguintes comandos:

$ git clone git://github.com/testng-team/testng.git
$ cd testng
$ ./gradlew build

O arquivo JAR resultante estará localizado no diretório testng/build/libs.

Cenários de Testes com TestNG na Prática

Vamos criar 6 exemplos práticos de testes com TestNG em Java, acompanhe abaixo um pouco de como podemos realizar alguns testes em nossas aplicações.

Cenário 1: Teste Unitário Simples

Este cenário demonstra como criar e executar um teste unitário simples com TestNG.

package br.com.virandoprogramador.testng;

import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;

public class CalculatorTest {

    @Test
    public void testAddition() {
        Calculator calculator = new Calculator();
        int result = calculator.add(2, 3);
        assertEquals(result, 5, "2 + 3 should equal 5");
    }
}

Cenário 2: Configuração de Teste com @BeforeMethod e @AfterMethod

Neste cenário, usamos as anotações @BeforeMethod e @AfterMethod para configurar e limpar o ambiente de teste antes e depois de cada método de teste.

package br.com.virandoprogramador.testng;

import org.testng.annotations.BeforeMethod;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;

public class DatabaseTest {

    @BeforeMethod
    public void setUp() {
        System.out.println("Setting up database connection");
    }

    @AfterMethod
    public void tearDown() {
        System.out.println("Closing database connection");
    }

    @Test
    public void testDatabaseQuery() {
        System.out.println("Running database query test");
    }
}

Cenário 3: Teste com Dependência entre Métodos

Este cenário mostra como criar testes onde um método depende da execução bem-sucedida de outro método.

package br.com.virandoprogramador.testng;

import org.testng.annotations.Test;

public class DependencyTest {

    @Test
    public void initialize() {
        System.out.println("Initialization");
    }

    @Test(dependsOnMethods = {"initialize"})
    public void executeTest() {
        System.out.println("Executing test");
    }
}

Cenário 4: Testes com Parâmetros

Aqui, mostramos como passar parâmetros para os métodos de teste usando o arquivo testng.xml.

package br.com.virandoprogramador.testng;

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class ParameterizedTest {

    @Test
    @Parameters({"username", "password"})
    public void testLogin(String username, String password) {
        System.out.println("Username: " + username);
        System.out.println("Password: " + password);
    }
}

Arquivo testng.xml:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
    <test name="Test">
        <parameter name="username" value="testUser" />
        <parameter name="password" value="testPass" />
        <classes>
            <class name="tests.ParameterizedTest" />
        </classes>
    </test>
</suite>

Cenário 5: Testes Baseados em Dados com @DataProvider

Este cenário ilustra como usar a anotação @DataProvider para fornecer dados para métodos de teste.

package br.com.virandoprogramador.testng;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;

public class DataProviderTest {

    @DataProvider(name = "additionData")
    public Object[][] createData() {
        return new Object[][] {
            { 2, 3, 5 },
            { 5, 7, 12 },
            { 10, 20, 30 }
        };
    }

    @Test(dataProvider = "additionData")
    public void testAddition(int a, int b, int expected) {
        Calculator calculator = new Calculator();
        int result = calculator.add(a, b);
        assertEquals(result, expected, a + " + " + b + " should equal " + expected);
    }
}

Cenário 6: Testes em Grupos

Este cenário mostra como organizar e executar testes em grupos.

package br.com.virandoprogramador.testng;

import org.testng.annotations.Test;

public class GroupTest {

    @Test(groups = {"fast"})
    public void fastTest() {
        System.out.println("Fast test");
    }

    @Test(groups = {"slow"})
    public void slowTest() {
        System.out.println("Slow test");
    }
}

Arquivo testng.xml para execução de grupos específicos:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
    <test name="Test">
        <groups>
            <run>
                <include name="fast" />
            </run>
        </groups>
        <classes>
            <class name="tests.GroupTest" />
        </classes>
    </test>
</suite>

Cenário 7: Testes de Integração

Neste cenário, mostramos como escrever testes de integração que dependem de múltiplos componentes do sistema.

package br.com.virandoprogramador.testng;

import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class IntegrationTest {

    @BeforeClass
    public void setUp() {
        System.out.println("Setting up integration test");
    }

    @Test
    public void testServiceLayer() {
        System.out.println("Testing service layer");
    }

    @Test
    public void testRepositoryLayer() {
        System.out.println("Testing repository layer");
    }
}

Os cenários acima demonstram a flexibilidade e o poder do TestNG para diferentes tipos de testes, desde testes unitários simples até testes de integração complexos.

Com suas anotações, suporte para multithreading, e capacidade de parametrização e agrupamento de testes

Processo de Escrita de Testes com TestNG

Escrever um teste com TestNG normalmente envolve três etapas:

  1. Escrever a Lógica do Teste: Desenvolva a lógica de negócios do seu teste e insira as anotações do TestNG no seu código.
  2. Configuração do Teste: Adicione informações sobre o seu teste (como o nome da classe, os grupos que você deseja executar, etc.) em um arquivo testng.xml ou em um formato build.xml.
  3. Execução do Teste: Execute o TestNG para rodar os testes configurados.

Conceitos Básicos

  • Conjunto de Testes (Suite): Representado por um arquivo XML, que pode conter um ou mais testes e é definido pela tag <suite>.
  • Teste (Test): Representado pela tag <test>, pode conter uma ou mais classes TestNG.
  • Classe TestNG: Uma classe Java que contém pelo menos uma anotação TestNG, representada pela tag <class>, podendo conter um ou mais métodos de teste.
  • Método de Teste: Um método Java anotado com @Test em seu código fonte.

Configuração de Testes

Os testes no TestNG podem ser configurados utilizando anotações como @BeforeXXX e @AfterXXX, que permitem executar lógica Java antes e depois de determinados pontos. Esses pontos podem ser qualquer um dos itens listados anteriormente, como suites, testes, classes ou métodos.

Anotações e Arquivo ‘testng.xml’

O restante deste manual explicará os seguintes pontos:

  • Anotações: Uma lista de todas as anotações do TestNG com uma breve explicação, dando uma ideia das diversas funcionalidades oferecidas. Para detalhes específicos, consulte a seção dedicada a cada anotação.
  • Arquivo testng.xml: Uma descrição detalhada do arquivo testng.xml, incluindo sua sintaxe e o que pode ser especificado nele.
  • Recursos do TestNG: Uma lista detalhada dos vários recursos e como usá-los, combinando anotações e o arquivo testng.xml.

Resumo sobre o TestNG

TestNG é um framework de testes robusto e flexível projetado para simplificar a ampla gama de necessidades de testes, desde testes unitários até testes de integração complexos. Inspirado em JUnit e NUnit, TestNG introduz funcionalidades avançadas que o tornam mais poderoso e fácil de usar, como suporte a anotações, testes em multithreading, parametrização de testes, e configuração de testes baseada em arquivos XML.

Criar testes com TestNG segue um processo simples de três etapas: escrever a lógica do teste com anotações TestNG, configurar as informações do teste em um arquivo testng.xml ou build.xml, e executar o TestNG para rodar os testes.

Avalie o Conteúdo
Compartilhar:

Deixe um comentário

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