TestNG vs JUnit – 它们之间的区别

之间的主要区别 TestNG 和 JUnit

  • TestNG 是一个意念波· Java框架,而 JUnit 是一个开源的JAVA单元测试框架。
  • 比较 TestNG Vs JUnit, TestNG 注释比 JUnit.
  • TestNG 允许我们创建并行测试,而 JUnit 不支持运行并行测试。
  • In TestNG,测试用例可以分组在一起,而在 JUnit,格鲁ping 无法同时进行多项测试。
TestNG vs JUnit
TestNG vs JUnit

什么是 TestNG?

TestNG 是一个自动化测试框架,其中 NG 代表“下一代”。 TestNG 受启发 JUnit 使用注释(@)。 TestNG 克服了缺点 JUnit 旨在让 端到端测试 简单。

运用 TestNG,您可以生成适当的报告,并且可以轻松了解有多少测试用例通过、失败和跳过。您可以单独执行失败的测试用例。

什么是 Junit?

JUnit 是一个开源单位 测试与验证 JAVA 框架。它可用于 Java 开发人员编写和运行可重复的测试。Erich Gamma 和 Kent Beck 最初开发了它。它是 xUnit 架构的一个实例。顾名思义,它用于 单元测试 一小段代码。

遵循测试驱动方法的开发人员必须在编写任何代码之前先编写并执行单元测试。

完成代码后,您应该执行所有测试,并且应该通过。每次添加任何代码时,您都需要重新执行所有测试用例,并确保没有任何问题。

之间的差异 JUnit 和 TestNG

以上皆是 TestNG 和 JUnit4 看起来很相似,除了一两个功能。让我们对两者进行比较,以快速确定哪种技术更适合单元测试。下表突出显示了两者支持的功能:

之间的差异 JUnit 和 TestNG

注释

以上皆是 JUnit 和 TestNG 使用注释,并且几乎所有注释看起来都相似。

TestNG 使用@BeforeMethod、@AfterMethod 类似于@Before、@After JUnit4.

以上皆是 TestNG Junit4 使用 @Test(timeout = 1000) 进行超时。查看下表了解更多详细信息 -

SNA 描述 TestNG JUnit 4
1 测试注解 @测试 @测试
2 在当前类中调用第一个测试方法之前执行 @课前 @课前
3 在当前类中的所有测试方法之后执行 @下课以后 @下课以后
4 在每个测试方法之前执行 @前方法 @前
5 在每个测试方法之后执行 注释: @后
6 忽略测试的注释 @Test(enable=false) @忽略
7 异常注解 @Test(expectedExceptions = ArithmeticException.class) @Test(预期=ArithmeticException.class)
8 超时 @测试(超时=1000) @测试(超时=1000)
9 在套件中的所有测试之前执行 @BeforeSuite 不适用
10 在套件中的所有测试之后执行 @AfterSuite 不适用
11 在测试运行之前执行 @测试前 不适用
12 测试运行后执行 @测试后 不适用
13 在调用属于这些组中任何一个组的第一个测试方法之前执行 @BeforeGroups 不适用
14 在属于此处任意组的最后一个测试方法之后运行 @AfterGroups 不适用

套件测试

套件用于同时执行多个测试。可以使用以下两种方式创建套件: TestNG 和 JUnit4. 然而,套件在 TestNG 因为它使用非常不同的方法来执行测试。让我们使用下面给出的代码片段来理解它:

运用 JUnit4

下面的课程描述了套件的使用方法 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 {		
// This class remains empty,it is used only as a holder for the above annotations		
}

运用 TestNG

TestNG 使用 xml 将所有测试捆绑在一个地方。下面的 xml 描述了使用 suite 时 TestNG:

<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="My test suite">
<test name="testing">
<classes>
<class name="com.guru99.SuiteTest1" />
<class name="com.guru99.SuiteTest2" />
</classes>
</test>
</suite>

忽略测试

使用两者我们就可以跳过测试。让我们使用如下所示的代码示例来看一下:

运用 JUnit4

下面的代码片段描述了使用@ignore注释时 JUnit4:

@Ignore
public void method1() 
{
	System.out.println("Using @Ignore , this execution is ignored");
}

运用 TestNG

下面的代码片段描述了使用@Test(enabled = false)注释时 TestNG:

@Test(enabled=false)
public void TestWithException()
{  
	System.out.println("Method should be ignored as it's not ready yet");
}

异常测试

异常测试可在 TestNG 和 JUnit4. 它用于检查测试中抛出了哪个异常?

运用 JUnit4

下面的代码片段描述了使用异常测试时 JUnit4:

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

运用 TestNG

下面的代码片段描述了使用异常测试时 TestNG:

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

超时

该功能在 TestNg 和 JUnit4.超时用于终止花费时间超过指定时间(以毫秒为单位)的测试。

运用 JUnit4

下面的代码片段描述了使用超时测试时 JUnit4:

@Test(timeout = 1000)  
public void method1()
{  
	while (true);  
}

运用 TestNG

下面的代码片段描述了使用超时测试时 TestNG:

@Test(timeOut = 1000)  
public void method1()
{  
	while (true);  
}

参数化测试

JUnit 提供了一种更简单、更易读的测试方法,称为参数化测试。 TestNG 和 JUnit 支持参数化测试,但它们定义参数值的方式有所不同。让我们逐一看看。

运用 JUnit4

“@RunWith” 和 “@Parameter” 注释用于为单元测试提供参数值。注释 @Parameters 必须返回 List[] 。此参数将作为参数传递到类构造函数中。

@RunWith(value = Parameterized.class)
public class JunitTest{
    
    privateint number;
    
    public JunitTest6(int number)
 {
    this.number = number;
     }

     @Parameters
    public static Collection<Object[]> data() 
{
       Object[][] data = new Object[][] { { 1 }, { 2 }, { 3 }, { 4 } };
    returnArrays.asList(data);
    }
     
     @Test
    public void parameterTest()
 {
    System.out.println("Parameterized Number is : " + number);
     }
}

运用 TestNG

In TestNG,XML文件或“@DataProvider”用于提供测试的参数。

这里在方法中声明的 @Parameters 注释需要一个参数进行测试。用作参数的数据将在 TestNGXML 配置文件。通过这样做,我们可以重用单个 测试用例 使用不同的数据集,我们可以得到不同的结果。

public class Test1 {

    @Test
    @Parameters(value="number")
    public void parameterTest(int number)
	{
    	System.out.println("Parameterized Number is : " + number);
    }
     
}

请参阅以下用于上述类的 xml 文件:

<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="My test suite">
<test name="testing">
    
<parameter name="number" value="2"/>    

<classes>
<class name="com.guru99.Test1" />
</classes>
</test>
</suite>

结语

我们看到了 JUnit4和 TestNG 详细比较。我们还看到,除了参数化测试和依赖性测试之外,两者是相似的。简而言之,我们可以说,根据灵活性和要求,我们可以选择其中任何一个进行单元测试。

总结一下这篇文章: