Kiểm thử đơn vị với JUnit

Nhập môn Kiểm thử trong Java

Maria Milusheva

Senior Software Engineer

Kiểm thử đơn vị - định nghĩa

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

Nhập môn Kiểm thử trong Java

Kiểm thử đơn vị tập trung vào chi tiết

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ị

Đồ họa minh họa trực quan mối quan hệ giữa kiểm thử đơn vị và mã sản phẩm

Nhập môn Kiểm thử trong Java

Tổng quan ngắn về các loại kiểm thử

  • Trong khóa học này, ta chủ yếu bàn về kiểm thử đơn vịtích hợp
  • Nhưng có rất nhiều loại kiểm thử!

Sơ đồ các kiểm thử phần mềm gồm kiểm thử chức năng như kiểm thử đơn vị và kiểm thử phi chức năng như kiểm thử khả dụng

Nhập môn Kiểm thử trong Java

Tổng quan ngắn về các loại kiểm thử

  • Trong khóa học này, ta chủ yếu bàn về kiểm thử đơn vịtích hợp
  • Nhưng có rất nhiều loại kiểm thử!

Sơ đồ các kiểm thử phần mềm gồm kiểm thử chức năng như kiểm thử đơn vị và kiểm thử phi chức năng như kiểm thử khả dụng. Bản này khoanh tròn kiểm thử đơn vị và tích hợp

Nhập môn Kiểm thử trong Java

Cú pháp JUnit: assertTrue() và assertFalse()

  • 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
Nhập môn Kiểm thử trong Java

assertNull() và assertNotNull()

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()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"));
Nhập môn Kiểm thử trong Java

Khẳng định ngoại lệ

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!

Nhập môn Kiểm thử trong Java

assertInstanceOf()

  • 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); 
}
1 https://www.baeldung.com/junit-assert-exception
Nhập môn Kiểm thử trong Java

Đặt tên kiểm thử đơn vị

  • 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()

1 https://dzone.com/articles/7-popular-unit-test-naming?fromrel=true
Nhập môn Kiểm thử trong Java

Ayo berlatih!

Nhập môn Kiểm thử trong Java

Preparing Video For Download...