Nhập môn Kiểm thử trong Java
Maria Milusheva
Senior Software Engineer
Hai khái niệm chính:
Unit - phần nhỏ nhất có thể kiểm thử của ứng dụng, như một phương thức
Kiểm thử đơn vị - Kiểm thử tập trung xác minh tính đúng đắn của một "unit" mã, tách biệt với các phần khác của ứng dụng
Ghi chú:
Kiểm thử đơn vị nhắm vào logic nhỏ, không phải bức tranh tổng thể
Các loại kiểm thử khác tập trung vào tổng thể (ví dụ: tích hợp)
JUnit có tên như vậy vì trường hợp sử dụng chính là kiểm thử đơn vị



assertTrue() kiểm tra một mệnh đề là đúng: List<String> list = new ArrayList<>();
assertTrue(list.isEmpty()); // Không lỗi
assertFalse() kiểm tra điều ngược lại:List<String> list = new ArrayList<>();
list.add("A");
assertFalse(list.isEmpty()); // Không lỗi
Biến null có thể gây NullPointerException!
Khẳng định kiểm tra biến là hoặc không phải null - assertNull() và assertNotNull()
Trường hợp thường gặp: kiểm tra giá trị lấy từ đâu đó không phải null
Map<String, Integer> catalogue = new HashMap<>();
catalogue.put("item1", 10);
// Không lỗi
assertNotNull(catalogue.get("item1"));
assertNull(catalogue.get("item2"));
Giả sử ta muốn xác minh có ném ArrayIndexOutOfBoundsException:
public String getIndex(String[] array, int index) {
return array[index];
}
JUnit cung cấp nhiều cách để làm điều này!
JUnit có assertThrows(), nhưng dùng cú pháp Java nâng cao (biểu thức lambda)
Có thể dùng assertInstanceOf() như sau:
try {
getIndex(new String[]{}, 4);
} catch (Exception e) {
// Truyền class ngoại lệ kỳ vọng và chính ngoại lệ
assertInstanceOf(ArrayIndexOutOfBoundsException.class, e);
}
Một dự án điển hình có hàng trăm kiểm thử đơn vị
Chúng cần gọn nhẹ và dễ hiểu
Tên phải giàu thông tin để biết ngay lỗi gì khi kiểm thử thất bại
Ví dụ: methodUnderTest_expectedBehavior_conditions()
Nhập môn Kiểm thử trong Java