TestNG vs JUnit - Sự khác biệt giữa chúng
Sự khác biệt chính giữa TestNG và JUnit
- TestNG là một Javadựa trên khuôn khổ, trong khi JUnit là Khung kiểm thử đơn vị nguồn mở dành cho JAVA.
- So sánh TestNG Vs JUnit, TestNG chú thích dễ sử dụng và dễ hiểu hơn JUnit.
- TestNG cho phép chúng tôi tạo các bài kiểm tra song song, trong khi JUnit không hỗ trợ chạy thử nghiệm song song.
- In TestNG, Các trường hợp kiểm thử có thể được nhóm lại với nhau, trong khi ở JUnit, Grouping Việc tiến hành các xét nghiệm cùng lúc là không thể.

Là gì TestNG?
TestNG là một khung thử nghiệm tự động hóa trong đó NG là viết tắt của “Thế hệ tiếp theo”. TestNG được truyền cảm hứng bởi JUnit sử dụng các chú thích (@). TestNG khắc phục những nhược điểm của JUnit và được thiết kế để làm kiểm tra end-to-end dễ dàng.
Sử dụng TestNG, bạn có thể tạo một báo cáo thích hợp và bạn có thể dễ dàng biết có bao nhiêu trường hợp kiểm thử đạt, không thành công và bị bỏ qua. Bạn có thể thực hiện các trường hợp thử nghiệm thất bại một cách riêng biệt.
Junit là gì?
JUnit là một đơn vị nguồn mở Kiểm tra Khung cho JAVA. Nó rất hữu ích cho Java Các nhà phát triển viết và chạy các bài kiểm tra có thể lặp lại. Erich Gamma và Kent Beck ban đầu phát triển nó. Đây là một ví dụ về kiến trúc xUnit. Như tên gọi của nó, nó được sử dụng cho Kiểm tra đơn vị của một đoạn mã nhỏ.
Các nhà phát triển theo phương pháp hướng đến thử nghiệm phải viết và thực thi thử nghiệm đơn vị trước khi viết bất kỳ mã nào.
Khi bạn đã hoàn tất mã, bạn nên thực hiện tất cả các thử nghiệm và nó sẽ vượt qua. Mỗi khi thêm bất kỳ mã nào, bạn cần thực hiện lại tất cả các trường hợp kiểm thử và đảm bảo không có gì bị hỏng.
Sự khác biệt giữa JUnit và TestNG
Cả hai TestNG và JUnit4 trông giống nhau, ngoại trừ một hoặc hai tính năng. Chúng ta hãy so sánh giữa hai loại để nhanh chóng quyết định xem công nghệ nào thuận lợi hơn cho Unit testing. Bảng dưới đây nêu bật các tính năng được hỗ trợ bởi cả hai:
Chú thích
Cả hai JUnit và TestNG sử dụng chú thích và hầu hết tất cả các chú thích đều trông giống nhau.
TestNG sử dụng @BeforeMethod ,@AfterMethod tương tự như @Before ,@After trong JUnit4.
Cả hai TestNG và Junit4 sử dụng @Test(timeout = 1000) cho thời gian chờ. Kiểm tra bảng bên dưới để biết thêm chi tiết-
| SN | Mô tả Chi tiết | TestNG | JUnit 4 |
|---|---|---|---|
| 1 | Chú thích kiểm tra | @Thử nghiệm | @Thử nghiệm |
| 2 | Thực thi trước khi phương thức thử nghiệm đầu tiên được gọi trong lớp hiện tại | @BeforeClass | @BeforeClass |
| 3 | Thực thi sau tất cả các phương thức kiểm tra trong lớp hiện tại | @Sau giờ học | @Sau giờ học |
| 4 | Thực thi trước mỗi phương pháp thử nghiệm | @BeforeMethod | @Trước |
| 5 | Thực thi sau mỗi phương pháp thử nghiệm | @AfterPhương thức | @Sau đó |
| 6 | chú thích bỏ qua bài kiểm tra | @Test(bật=false) | @phớt lờ |
| 7 | chú thích cho ngoại lệ | @Test(expectedExceptions = ArithmeticException.class) | @Test(mong đợi = ArithmeticException.class) |
| 8 | thời gian chờ | @Test(thời gian chờ = 1000) | @Test(thời gian chờ = 1000) |
| 9 | Thực hiện trước tất cả các thử nghiệm trong bộ phần mềm | @BeforeSuite | n / a |
| 10 | Thực thi sau tất cả các thử nghiệm trong bộ phần mềm | @AfterSuite | n / a |
| 11 | Thực thi trước khi chạy thử nghiệm | @Trước khi kiểm tra | n / a |
| 12 | Thực thi sau khi chạy thử | @SauTest | n / a |
| 13 | Thực thi trước khi phương thức thử nghiệm đầu tiên thuộc về bất kỳ nhóm nào trong số này được gọi | @BeforeGroups | n / a |
| 14 | chạy theo phương pháp thử nghiệm cuối cùng thuộc về bất kỳ nhóm nào ở đây | @AfterGroups | n / a |
Kiểm tra bộ
Các bộ được sử dụng để thực hiện nhiều thử nghiệm cùng nhau. Suite có thể được tạo bằng cách sử dụng cả hai TestNG và JUnit4. Tuy nhiên, bộ phần mềm mạnh hơn ở TestNG vì nó sử dụng phương pháp rất khác nhau để thực hiện các bài kiểm tra. Hãy hiểu nó bằng cách sử dụng đoạn mã như dưới đây:
Sử dụng JUnit4
Lớp bên dưới mô tả việc sử dụng bộ phần mềm khi làm việc với 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
}
Sử dụng TestNG
TestNG sử dụng xml để gộp tất cả các bài kiểm tra vào một nơi. Dưới đây xml mô tả việc sử dụng bộ phần mềm khi làm việc với 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>
Bỏ qua kiểm tra
Sử dụng cả hai, chúng ta có thể bỏ qua bài kiểm tra. Hãy xem nó bằng ví dụ mã như dưới đây:
Sử dụng JUnit4
Đoạn mã bên dưới mô tả việc sử dụng chú thích @ignore khi làm việc với JUnit4:
@Ignore
public void method1()
{
System.out.println("Using @Ignore , this execution is ignored");
}
Sử dụng TestNG
Đoạn mã bên dưới mô tả việc sử dụng chú thích @Test(enabled=false) khi làm việc với TestNG:
@Test(enabled=false)
public void TestWithException()
{
System.out.println("Method should be ignored as it's not ready yet");
}
Kiểm tra ngoại lệ
Kiểm tra ngoại lệ có sẵn cả trong TestNG và JUnit4. Nó được sử dụng để kiểm tra xem ngoại lệ nào được đưa ra khỏi quá trình kiểm thử?
Sử dụng JUnit4
Đoạn mã dưới đây mô tả việc sử dụng kiểm tra ngoại lệ khi làm việc với JUnit4:
@Test(expected = ArithmeticException.class)
public void divideByZero()
{
Int i = 1/0;
}
Sử dụng TestNG
Đoạn mã dưới đây mô tả việc sử dụng kiểm tra ngoại lệ khi làm việc với TestNG:
@Test(expectedExceptions = ArithmeticException.class)
public void divideByZero()
{
Int i = 1/0;
}
Timeout
Tính năng này được triển khai trong cả TestNg và JUnit4.Timeout được sử dụng để kết thúc quá trình kiểm tra mất nhiều thời gian hơn thời gian chỉ định (tính bằng mili giây).
Sử dụng JUnit4
Đoạn mã bên dưới mô tả việc sử dụng kiểm tra thời gian chờ khi làm việc với JUnit4:
@Test(timeout = 1000)
public void method1()
{
while (true);
}
Sử dụng TestNG
Đoạn mã bên dưới mô tả việc sử dụng kiểm tra thời gian chờ khi làm việc với TestNG:
@Test(timeOut = 1000)
public void method1()
{
while (true);
}
Kiểm tra tham số
JUnit cung cấp một cách tiếp cận dễ dàng và dễ đọc hơn để kiểm tra được gọi là kiểm tra tham số. Cả hai TestNG và JUnit hỗ trợ kiểm tra tham số nhưng khác nhau ở cách chúng xác định giá trị tham số. Chúng ta hãy xem điều này từng cái một.
Sử dụng JUnit4
Các chú thích “@RunWith” và “@Parameter” được sử dụng để cung cấp giá trị tham số cho bài kiểm tra đơn vị. Chú thích @Parameters phải trả về List[] . Tham số này sẽ được chuyển vào hàm tạo của lớp làm đối số.
@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);
}
}
Sử dụng TestNG
In TestNG, tệp XML hoặc “@DataProvider” được sử dụng để cung cấp tham số cho thử nghiệm.
Ở đây chú thích @Parameters được khai báo trong phương thức, cần một tham số để kiểm tra. Dữ liệu được sử dụng làm tham số sẽ cung cấp trong TestNGcác tệp cấu hình XML của. Bằng cách này, chúng ta có thể tái sử dụng một Trường hợp thử nghiệm với các tập dữ liệu khác nhau và chúng ta có thể nhận được các kết quả khác nhau.
public class Test1 {
@Test
@Parameters(value="number")
public void parameterTest(int number)
{
System.out.println("Parameterized Number is : " + number);
}
}
Xem tệp xml bên dưới sẽ được sử dụng cho lớp trên:
<!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>
Tổng kết
Chúng tôi đã thấy JUnit4 và TestNG so sánh chi tiết. Chúng tôi cũng thấy cả hai đều giống nhau ngoại trừ kiểm tra tham số và kiểm tra phụ thuộc. Tóm lại, chúng ta có thể nói, dựa trên tính linh hoạt và yêu cầu, chúng ta có thể chọn bất kỳ cái nào trong số chúng để Kiểm tra đơn vị.

