- vừa được xem lúc

Kiểm tra xem một biến có phải là Null hay không bằng cách sử dụng Hamcrest

0 0 3

Người đăng: Thái Thịnh

Theo Viblo Asia

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.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tổng hợp các bài hướng dẫn về Design Pattern - 23 mẫu cơ bản của GoF

Link bài viết gốc: https://gpcoder.com/4164-gioi-thieu-design-patterns/. Design Patterns là gì. Design Patterns không phải là ngôn ngữ cụ thể nào cả.

0 0 294

- vừa được xem lúc

Học Spring Boot bắt đầu từ đâu?

1. Giới thiệu Spring Boot. 1.1.

0 0 268

- vừa được xem lúc

Cần chuẩn bị gì để bắt đầu học Java

Cần chuẩn bị những gì để bắt đầu lập trình Java. 1.1. Cài JDK hay JRE.

0 0 47

- vừa được xem lúc

Sử dụng ModelMapper trong Spring Boot

Bài hôm nay sẽ là cách sử dụng thư viện ModelMapper để mapping qua lại giữa các object trong Spring nhé. Trang chủ của ModelMapper đây http://modelmapper.org/, đọc rất dễ hiểu dành cho các bạn muốn tìm hiểu sâu hơn. 1.

0 0 190

- vừa được xem lúc

[Java] 1 vài tip nhỏ khi sử dụng String hoặc Collection part 1

. Hello các bạn, hôm nay mình sẽ chia sẻ về mẹo check String null hay full space một cách tiện lợi. Mình sẽ sử dụng thư viện Lớp StringUtils download file jar để import vào thư viện tại (link).

0 0 67

- vừa được xem lúc

Deep Learning với Java - Tại sao không?

Muốn tìm hiểu về Machine Learning / Deep Learning nhưng với background là Java thì sẽ như thế nào và bắt đầu từ đâu? Để tìm được câu trả lời, hãy đọc bài viết này - có thể kỹ năng Java vốn có sẽ giúp bạn có những chuyến phiêu lưu thú vị. DJL là tên viết tắt của Deep Java Library - một thư viện mã ng

0 0 134