TestNG vs JUnit – ความแตกต่างระหว่างพวกเขา

ความแตกต่างที่สำคัญระหว่าง TestNG รวมถึง JUnit

  • TestNG คือ Java-based กรอบในขณะที่ JUnit เป็น Unit Testing Framework แบบโอเพ่นซอร์สสำหรับ JAVA
  • เปรียบเทียบ TestNG Vs JUnit, TestNG คำอธิบายประกอบใช้งานง่ายและเข้าใจง่ายกว่า JUnit.
  • TestNG ทำให้เราสามารถสร้างการทดสอบแบบขนานได้ในขณะที่ JUnit ไม่รองรับการทดสอบแบบขนาน
  • In TestNG,กรณีทดสอบสามารถจัดกลุ่มเข้าด้วยกันในขณะที่อยู่ใน JUnit, ไม่สามารถจัดกลุ่มการทดสอบเข้าด้วยกันได้
TestNG vs JUnit
TestNG vs JUnit

ความหมายของ TestNG?

TestNG เป็นกรอบการทดสอบระบบอัตโนมัติซึ่ง NG ย่อมาจาก “Next Generation” TestNG ได้รับแรงบันดาลใจจาก JUnit ซึ่งใช้คำอธิบายประกอบ (@) TestNG เอาชนะข้อเสียของ JUnit และถูกออกแบบมาเพื่อให้ การทดสอบแบบ end-to-end ง่าย.

การใช้ TestNGคุณสามารถสร้างรายงานที่เหมาะสมได้ และคุณสามารถทราบได้อย่างง่ายดายว่ามีกรณีการทดสอบใดบ้างที่ผ่าน ล้มเหลว และข้ามไป คุณสามารถดำเนินการกรณีทดสอบที่ล้มเหลวแยกกันได้

จูนิท คืออะไร?

JUnit เป็นหน่วยโอเพ่นซอร์ส การทดสอบ กรอบการทำงานสำหรับ JAVA มันมีประโยชน์สำหรับ Java นักพัฒนาเขียนและรันการทดสอบที่ทำซ้ำได้ Erich Gamma และ Kent Beck พัฒนาสิ่งนี้ในช่วงแรก เป็นอินสแตนซ์ของสถาปัตยกรรม xUnit ตามชื่อที่บ่งบอกว่าใช้สำหรับ การทดสอบหน่วย ของโค้ดเล็กๆ น้อยๆ

นักพัฒนาที่ปฏิบัติตามระเบียบวิธีทดสอบจะต้องเขียนและดำเนินการทดสอบยูนิตก่อนโค้ดใดๆ

เมื่อคุณเขียนโค้ดเสร็จแล้ว คุณควรดำเนินการทดสอบทั้งหมด และมันจะผ่านไป ทุกครั้งที่เพิ่มโค้ดใดๆ คุณจะต้องดำเนินการกรณีทดสอบทั้งหมดอีกครั้ง และตรวจสอบให้แน่ใจว่าไม่มีอะไรเสียหาย

ความแตกต่างระหว่าง JUnit รวมถึง TestNG

ทั้งสอง TestNG รวมถึง JUnit4 ดูคล้ายกัน ยกเว้นหนึ่งหรือสองคุณสมบัติ เรามาดูการเปรียบเทียบระหว่างทั้งสองเพื่อตัดสินใจอย่างรวดเร็วว่าเทคโนโลยีใดที่เหมาะกับการทดสอบหน่วยมากกว่า ตารางด้านล่างเน้นคุณสมบัติที่ทั้งสองรองรับ:

ความแตกต่างระหว่าง JUnit รวมถึง TestNG

คำอธิบายประกอบ

ทั้งสอง JUnit รวมถึง TestNG ใช้คำอธิบายประกอบและคำอธิบายประกอบเกือบทั้งหมดมีลักษณะคล้ายกัน

TestNG ใช้ @BeforeMethod ,@AfterMethod คล้ายกับ @Before ,@After in JUnit4.

ทั้งสอง TestNG และ Junit4 ใช้ @Test(timeout = 1000) เพื่อหมดเวลา ตรวจสอบตารางด้านล่างเพื่อดูรายละเอียดเพิ่มเติม

SNA Descriptไอออน TestNG JUnit 4
1 ทดสอบคำอธิบายประกอบ @ทดสอบ @ทดสอบ
2 ดำเนินการก่อนที่จะเรียกใช้วิธีการทดสอบแรกในคลาสปัจจุบัน @บีฟอร์คลาส @บีฟอร์คลาส
3 ดำเนินการหลังจากวิธีทดสอบทั้งหมดในคลาสปัจจุบัน @หลังเลิกเรียน @หลังเลิกเรียน
4 ดำเนินการก่อนวิธีทดสอบแต่ละวิธี @ก่อนวิธีการ @ก่อน
5 ดำเนินการหลังจากวิธีทดสอบแต่ละวิธี @AfterMethod @หลังจาก
6 คำอธิบายประกอบเพื่อละเว้นการทดสอบ @ทดสอบ(เปิดใช้งาน=เท็จ) @ไม่สนใจ
7 คำอธิบายประกอบสำหรับข้อยกเว้น @Test (expectedExceptions = ArithmeticException.class) @Test (คาดหวัง = ArithmeticException.class)
8 การหยุดพักชั่วคราว @ ทดสอบ (หมดเวลา = 1000) @ ทดสอบ (หมดเวลา = 1000)
9 ดำเนินการก่อนการทดสอบทั้งหมดในชุด @บีฟอร์สวีท N / A
10 ดำเนินการหลังจากการทดสอบทั้งหมดในชุดโปรแกรม @อาฟเตอร์สวีท N / A
11 ดำเนินการก่อนที่จะรันการทดสอบ @ก่อนสอบ N / A
12 ดำเนินการหลังจากการทดสอบรัน @หลังทดสอบ N / A
13 ดำเนินการก่อนที่จะเรียกใช้วิธีการทดสอบแรกที่เป็นของกลุ่มใดๆ เหล่านี้ @BeforeGroups. N / A
14 ทำงานตามวิธีทดสอบสุดท้ายที่เป็นของกลุ่มใดๆ ที่นี่ @อาฟเตอร์กรุ๊ป N / A

การทดสอบชุด

ห้องสวีทใช้เพื่อดำเนินการทดสอบหลายรายการพร้อมกัน สามารถสร้างห้องสวีทได้โดยใช้ทั้งสองอย่าง 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 อธิบายการใช้ชุดโปรแกรมขณะทำงานด้วย 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 ที่นี่ประกาศในวิธีการนี้ ต้องการพารามิเตอร์สำหรับการทดสอบ ข้อมูลที่ใช้เป็นพารามิเตอร์จะระบุไว้ TestNGไฟล์การกำหนดค่า XML ของ การทำเช่นนี้เราสามารถนำกลับมาใช้ใหม่ได้ กรณีทดสอบ ด้วยชุดข้อมูลที่ต่างกัน เราก็จะได้ผลลัพธ์ที่ต่างกัน

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 การเปรียบเทียบในรายละเอียด เราพบว่าทั้งสองอย่างมีความคล้ายคลึงกัน ยกเว้นการทดสอบแบบพารามิเตอร์และการทดสอบแบบพึ่งพา กล่าวโดยย่อ เราสามารถพูดได้ว่า เราสามารถเลือกวิธีใดวิธีหนึ่งสำหรับการทดสอบยูนิตได้ตามความยืดหยุ่นและความต้องการ