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