Trong unit testing, việc xác minh một biến là null là một nhiệm vụ vô cùng phổ biến mà ai ai cũng từng phải trải qua. Hamcrest, một framework phổ biến được dùng để viết các đối tượng matcher, cung cấp một cách rõ ràng và dễ đọc nhất có thể để khẳng định các điều kiện trong các điều kiện thử nghiệm. Chúng ta hãy đi sâu để kiểm tra xem một biến có null hay không bằng cách sử dụng Hamcrest assertThat() và cũng thảo luận về các khẳng định null và không null của JUnit nhé.
Giới thiệu qua về Hamcrest
Hamcrest là một framework phổ biến được sử dụng để viết các đối tượng khớp lệnh, cho phép các đoạn mã kiểm tra dễ đọc và diễn đạt hơn. Trọng tâm của Hamcrest nằm ở phương pháp assertThat(), đây là một công cụ mạnh mẽ và linh hoạt để đưa ra các khẳng định trong các bài kiểm tra. Phương pháp assertThat() này sử dụng hai tham số: Giá trị thực tế cần kiểm tra và một bộ khớp lệnh xác định điều kiện mong đợi. Phương pháp này cho phép các biểu thức ngôn ngữ trôi chảy và tự nhiên hơn trong các bài kiểm tra, giúp dễ hiểu và duy trì mã kiểm tra hơn. Bằng cách sử dụng nhiều bộ khớp lệnh khác nhau, chẳng hạn như is(), equalTo(), và nullValue(), các lập trình viên có thể tạo ra các khẳng định chính xác và mang tính mô tả, do đó tăng cường khả năng đọc và khả năng diễn đạt của các bài unit testing của họ.
So sánh Hamcrest và JUnit
1. Về giao diện
- Hamcrest cung cấp thư viện các đối tượng so sánh để tạo ra các khẳng định kiểm tra linh hoạt và dễ đọc.
- JUnit là một framework của Java cung cấp nhiều khẳng định và chú thích khác nhau để viết và chạy thử nghiệm.
2. Về phương pháp khẳng định
- Hamcrest sử dụng hàm assertThat()
- JUnit thì sử dụng bộ nhiều hàm bao gồm assertEquals(), assertTrue(), assertFalse(), assertNull(), assertNotNull()
3. Về tính linh hoạt
- Hamcrest rất linh hoạt với nhiều bộ so sánh, cho phép đưa ra những khẳng định phức tạp.
- JUnit thì cung cấp các khẳng định cơ bản, trực tiếp nhưng ít diễn đạt hơn so với của Hamcrest.
4. Về khả năng đọc
- Hamcrest Tập trung vào khả năng đọc và tính trôi chảy của các khẳng định, giúp các đoạn mã kiểm tra dễ đọc và dễ hiểu hơn.
- JUnit thì khiến các khẳng định không được trôi chảy và có thể dài dòng hơn, nhưng chúng lại đơn giản và đúng trọng tâm hơn.
5. Về tính tích hợp
- Hamcrest có thể dễ dàng tích hợp với JUnit và các framework thử nghiệm khác để nâng cao khả năng khẳng định.
- JUnit thì hoạt động như một framework thử nghiệm độc lập nhưng có thể tích hợp với các thư viện khác để có thêm chức năng.
6. Về mức độ sử dụng phổ biến
- Hamcrest thường được sử dụng để tạo các khẳng định tùy chỉnh và chi tiết trong các bài unit testing.
- JUnit thì được sử dụng để viết và chạy thử nghiệm với các khẳng định cơ bản và quản lý vòng đời thử nghiệm.
Cách sử dụng Hamcrest
Để kiểm tra xem một biến có phải là null hay không, bạn có thể sử dụng hàm "is" so sánh kết hợp với nullValue().
Ví dụ minh họa
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.nullValue; public class HamcrestNullTest { public static void main(String[] args) { String variable = null; assertThat(variable, nullValue()); }
}
Trong đoạn mã trên:
- assertThat(variable, nullValue()) dùng kiểm tra xem biến có null hay không.
- nullValue() là một trình so sánh để xác minh giá trị là null.
Việc kiểm tra sẽ được thực hiện nếu biến là null. Nếu biến không phải là null, kiểm tra sẽ thất bại và lỗi AssertionError sẽ được đưa ra.
java.lang.AssertionError: Expected: is but: was at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:18) at com.example.HamcrestNullTest.testVariableIsNull(HamcrestNullTest.java:10)
Sử dụng các khẳng null và không null của JUnit
JUnit cung cấp các khẳng định tích hợp để kiểm tra các giá trị null và không null. Các khẳng định này rất dễ sử dụng.
Ví dụ minh họa
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertNotNull; public class JUnitNullTest { @Test public void testVariableIsNull() { String variable = null; assertNull(variable); } @Test public void testVariableIsNotNull() { String variable = "Not Null"; assertNotNull(variable); }
}
Trong đoạn mã trên:
- assertNull(variable) giúp kiểm tra xem biến có null không và trả về kết quả nếu null.
- assertNotNull(variable) kiểm tra xem biến có phải là null không và trả về kết quả là null.
Kiểm tra sẽ được thực hiện nếu các điều kiện được đáp ứng. Nếu các điều kiện không được đáp ứng, AssertionError sẽ được đưa ra.
org.junit.ComparisonFailure: Expected :null
Actual :SomeValue at org.junit.Assert.assertNull(Assert.java:253) at com.example.JUnitNullTest.testVariableIsNull(JUnitNullTest.java:12)
Kết luận
Kiểm tra giá trị null là yêu cầu chung trong unit testing. Phương pháp assertThat() của Hamcrest với nullValue() cung cấp một cách dễ đọc và diễn đạt để khẳng định giá trị null. Ngoài ra, JUnit cung cấp các khẳng định đơn giản với assertNull và assertNotNull để xác minh các điều kiện null và không null. Sử dụng các công cụ này một cách hiệu quả có thể giúp các đoạn mã thử nghiệm dễ đọc và dễ bảo trì hơn. Cảm ơn các bạn đã theo dõi bài viết.