Basic Test in Swift (P1)

by Hoang Anh Tuan
1.1K views

Trong lập trình, để có thể tự kiểm tra app để hoạt động chính xác hay chưa, thì ta phải test hết toàn bộ các case xảy ra. Tuy nhiên, nếu làm bằng 1 cách test thủ công thì rất tốn thời gian.
Để có thể test tự động, thì có thể dùng Unit test. Vậy ở bài viết này, mình sẽ giới thiệu về cách sử dụng Unit test trong lập trình iOS.

Nội dung bài viết

  • Unit test là gì?
  • Giới thiệu về unit test trong iOS
  • Useful Test
  • Khởi tạo Test Target
  • Run the test
  • Functional test Demo

Unit test là gì?

  • Là phương pháp dùng để kiểm tra tính đúng đắn của một đơn vị source code. Một Unit (đơn vị) source code là phần nhỏ nhất có thể test được của chương trình, thường là một phương thức trong một lớp hoặc một tập hợp các phương thức thực hiện một mục đích thiết yếu.
  • Bạn viết các test case để Xcode tiến hành test các test case đó.

Giới thiệu về Unit test trong iOS

Xcode cung cấp 3 kiểu test chính:

  • Functional test: tập trung vào test các func.
  • Performance tests: tập trung vào đo lương thời gian app của bạn thực thi xong các task trên các loại thiết bị khác nhau.
  • User Interface tests (UI Tests): tập trung vào những tác vụ của người dùng trên UI.

Note:

  • Functional test & performance test: Là những đoạn test mà bạn tự viết để test sự hoạt động của các func trong app.
  • UI Test: Ghi lại những thứ mà bạn tương tác trên UI của app.

Useful Test

1 test case được coi là useful khi:

  • Test case phải có khả năng fail: Nếu test đó không thể fail, thì việc test sẽ rất vô giá trị, bạn nên xốa nó đi.
  • Test case phải có khả năng success: Nếu test đó không thể success, thì việc test sẽ rất vô giá trị, tương tự ở trên, bạn nên xốa nó đi.
  • Test case phải được refactor và được viết đơn giản

Khởi tạo 1 Test Target

Để viết được test, trước hết cần tạo 1 Unit test target để viết test:

Điền tên cho class rồi chọn Next.

  1. Xcode imports sẵn cho bạn frameworks XCTest và class được tạo là subclass của XCTestCase.
  2. func setUp(): dùng để thiết lập lại trạng thái trước mỗi lần test.
  3. func tearDown(): dùng để thực hiện dọn dẹp sau khi mỗi lần test kết thúc.
  4. measure: dùng để đo thời gian thực hiện xong việc test -> giúp test performance.

Trình tự mỗi khi thực hiện test 1 test case như sau:

Run the Tests:

Có 3 cách để run test:

  • Product ▸ Test or Command-U: Cách này sẽ run tất cả test classes trong project.
  • Click vào button mũi tên ở Test navigator.
  • Click chọn nút hình kim cương để run 1 test case cụ thể.

Basic Functional Test Demo

Ở ví dụ này, mình sẽ tiến hành việc test xem dữ liệu học sinh ở file json đã chính xác chưa.

Tạo 1 class Person:

class Person: Decodable {
    let name: String
    let age: Int
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

Tạo 1 class Service chứa các logic thực hiện việc lấy dữ liệu:

class Service {
    func getListStudent() -> [Person] {
        var students: [Person] = []
        guard let url = Bundle.main.url(forResource: "config", withExtension: ".json") else {
            return students
        }
        
        
        do {
            let data = try Data(contentsOf: url)
            let results = try JSONDecoder().decode([Person].self, from: data)
            students += results
        } catch {
            print("Can get data, error: \(error)")
        }
        return students
    }
}

Tiến hành việc viết test thông tin cho sinh viên đầu tiên:

  1. @tesable import + tên project: Cho phép unit tests truy cập đến toàn bộ các dữ liệu kiểu internal của project.
  2. Khai báo 1 biến kiểu service.
  3. Khởi tạo sut mỗi lần bắt đầu thực hiện test 1 test case.
  4. Set sut = nil mỗi khi kết thúc việc test 1 test case.
  5. Viết func test để test thông tin học sinh 1.
  6. Viết các hàm để test.

Note: Khi viết func để test thì phải tên func phải luôn bắt đầu với từ test để Xcode có thể biết đó là 1 test.

Thực hiện tiến hành test func, nhận được kết quả dữ liệu cần kiểm tra đã chính xác:

Để đảm bảo đây là 1 Userful test, thực hiện sửa đổi name của sinh viên 1 trong file json thành "Cuong1" và tiến hành test lại func, nhận được kết quả sau:

Việc test thất bại, đồng thời XCode cũng thông báo ra kết quả để biết sai ở đâu.

Ở phần tiếp theo, mình sẽ nói về performance test, UI Test và 1 vài thứ hay ho mà Xcode support cho việc test.

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.