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

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

