TestNG Vs JUnit: Qual é a diferença?

Índice:

Anonim

Tanto o Testng quanto o Junit são frameworks de teste usados ​​para testes de unidade. TestNG é semelhante ao JUnit. Poucas funcionalidades adicionais são adicionadas a ele, o que torna o TestNG mais poderoso do que o JUnit.

Este tutorial é voltado principalmente para analisar recursos de JUnit e TestNG. Ajuda os desenvolvedores a decidir qual estrutura deve ser usada para testes de unidade. Vamos analisar as semelhanças entre TestNG e JUnit4 primeiro.

TestNG é uma estrutura de teste inspirada em JUnit e NUnit.

Aqui está a tabela que mostra os recursos suportados por JUnit e TestNG.

Comparação de recursos JUnit4 e TestNG

Ambos TestNG e JUnit4 parecem semelhantes, exceto um ou dois recursos. Vamos fazer uma comparação entre os dois para decidir rapidamente qual tecnologia é mais favorável para o Teste de Unidade. A tabela abaixo destaca os recursos suportados por ambos:

Anotações

Tanto o JUnit quanto o TestNG usam anotações e quase todas as anotações parecem semelhantes.

TestNG usa @BeforeMethod, @ AfterMethod semelhante a @Before, @ After em JUnit4.

Ambos TestNG e Junit4 usam @Test (tempo limite = 1000) para tempo limite. Verifique a tabela abaixo para mais detalhes-

SN Descrição TestNG JUnit 4
1 Anotação de teste @Teste @Teste
2 É executado antes que o primeiro método de teste seja invocado na classe atual @Antes da aula @Antes da aula
3 Executa após todos os métodos de teste na classe atual @Depois da aula @Depois da aula
4 Executa antes de cada método de teste @BeforeMethod @Antes
5 Executa após cada método de teste @AfterMethod @Depois de
6 anotação para ignorar um teste @Test (ativar = falso) @ignorar
7 anotação para exceção @Test (expectedExceptions = ArithmeticException.class) @Test (esperado = ArithmeticException.class)
8 tempo esgotado @Test (tempo limite = 1000) @Test (tempo limite = 1000)
9 Executa antes de todos os testes no pacote @BeforeSuite n / D
10 Executa após todos os testes no pacote @AfterSuite n / D
11 Executa antes de um teste ser executado @BeforeTest n / D
12 Executa após a execução de um teste @AfterTest n / D
13 É executado antes que o primeiro método de teste que pertença a qualquer um desses grupos seja invocado @BeforeGroups n / D
14 executado após o último método de teste que pertence a qualquer um dos grupos aqui @AfterGroups n / D

Suite Teste

As suítes são usadas para executar vários testes juntos. As suítes podem ser criadas usando TestNG e JUnit4. No entanto, as suítes são mais poderosas no TestNG, pois ele usa um método muito diferente para a execução de testes. Vamos entender isso usando o snippet de código conforme fornecido abaixo:

Usando JUnit4

A classe abaixo descreve o uso do pacote ao trabalhar com JUnit4:

package guru99.junit;import org.junit.runner.RunWith;import org.junit.runners.Suite;@RunWith (Suite.class)@ Suite.SuiteClasses ({SuiteTest1.class,SuiteTest2.class,})public class JunitTest {// Esta classe permanece vazia, ela é usada apenas como suporte para as anotações acima}

Usando TestNG

TestNG usa xml para agrupar todos os testes em um lugar. O xml abaixo descreve o uso do pacote ao trabalhar com TestNG:

Ignorar Teste

Usando ambos, podemos pular um teste. Vamos vê-lo usando o exemplo de código fornecido a seguir:

Usando JUnit4

O snippet de código abaixo descreve o uso da anotação @ignore ao trabalhar com JUnit4:

@Ignorarpublic void method1 (){System.out.println ("Usando @Ignore, esta execução é ignorada");}

Usando TestNG

O snippet de código abaixo descreve o uso da anotação @Test (enabled = false) ao trabalhar com TestNG:

@Test (ativado = falso)public void TestWithException (){System.out.println ("O método deve ser ignorado, pois ainda não está pronto");}

Teste de Exceção

O teste de exceção está disponível em TestNG e JUnit4. Ele é usado para verificar, qual exceção é lançada no teste?

Usando JUnit4

O snippet de código abaixo descreve o uso do teste de exceção ao trabalhar com JUnit4:

@Test (esperado = ArithmeticException.class)public void divideByZero (){Int i = 1/0;}

Usando TestNG

O snippet de código abaixo descreve o uso do teste de exceção ao trabalhar com TestNG:

@Test (expectedExceptions = ArithmeticException.class)public void divideByZero (){Int i = 1/0;}

Tempo esgotado

Este recurso é implementado em TestNg e JUnit4.Timeout é usado para encerrar um teste que leva mais tempo do que o especificado (em milissegundos).

Usando JUnit4

O snippet de código abaixo descreve o uso do teste de tempo limite ao trabalhar com JUnit4:

@Test (tempo limite = 1000)public void method1 (){enquanto (verdadeiro);}

Usando TestNG

O snippet de código abaixo descreve o uso do teste de tempo limite ao trabalhar com TestNG:

@Test (timeOut = 1000)public void method1 (){enquanto (verdadeiro);}

Teste Parametrizado

JUnit fornece uma abordagem mais fácil e legível para teste conhecido como teste parametrizado. Tanto TestNG quanto JUnit oferecem suporte a testes parametrizados, mas diferem na maneira como definem o valor do parâmetro. Vamos ver um por um.

Usando JUnit4

As anotações "@RunWith" e "@Parameter" são usadas para fornecer o valor do parâmetro para o teste de unidade. A anotação @Parameters deve retornar List []. Este parâmetro será passado para o construtor da classe como um argumento.

@RunWith (value = Parameterized.class)public class JunitTest {número privateint;public JunitTest6 (número interno){this.number = número;}@Parametersdados public static Collection  (){Objeto [] [] dados = novo Objeto [] [] {{1}, {2}, {3}, {4}};returnArrays.asList (dados);}@Testepublic void parameterTest (){System.out.println ("Número parametrizado é: + número);}}

Usando TestNG

Em TestNG, o arquivo XML ou "@DataProvider" é usado para fornecer um parâmetro para teste.

Aqui, a anotação @Parameters declarada no método, precisa de um parâmetro para teste. Os dados usados ​​como parâmetro serão fornecidos nos arquivos de configuração XML do TestNG. Fazendo isso, podemos reutilizar um único caso de teste com conjuntos de dados diferentes e podemos obter resultados diferentes.

public class Test1 {@Teste@Parameters (value = "number")public void parameterTest (número int){System.out.println ("Número parametrizado é: + número);}}

Veja abaixo o arquivo xml a ser usado para a classe acima:

Resumo :

Vimos a comparação JUnit4 e TestNG em detalhes. Também vimos que ambos são semelhantes, exceto o teste parametrizado e o teste de dependência. Em suma, podemos dizer que, com base na flexibilidade e nos requisitos, podemos escolher qualquer um deles para o Teste Unitário.