Hướng Nghiệp Dữ Liệu

Giới thiệu Unit Test, Widget Test và Integration Test trong Flutter

Được viết bởi Admin|0 lượt xem
Giới thiệu Unit Test, Widget Test và Integration Test trong Flutter

Tóm tắt nhanh

Tìm hiểu về 3 loại testing trong Flutter: Unit Test, Widget Test và Integration Test - khi nào dùng loại nào.

Mục lục bài viết (29)

Testing là phần quan trọng trong phát triển ứng dụng. Flutter hỗ trợ 3 loại testing: Unit Test, Widget Test và Integration Test. Bài viết này sẽ giúp bạn hiểu rõ từng loại.

Testing Pyramid

[object Object]

1. Unit Test

Định nghĩa:

Unit Test kiểm tra một function, method hoặc class riêng lẻ trong isolation.

Khi nào dùng:

  • ✅ Test business logic
  • ✅ Test utility functions
  • ✅ Test data transformations
  • ✅ Test calculations

Ví dụ:

[object Object]
[object Object]

Chạy Unit Test:

[object Object]

2. Widget Test

Định nghĩa:

Widget Test kiểm tra một widget riêng lẻ trong isolation với test environment.

Khi nào dùng:

  • ✅ Test UI components
  • ✅ Test user interactions
  • ✅ Test widget rendering
  • ✅ Test state changes

Ví dụ:

[object Object]
[object Object]

Chạy Widget Test:

[object Object]

3. Integration Test

Định nghĩa:

Integration Test kiểm tra toàn bộ ứng dụng hoặc một flow hoàn chỉnh trên device/emulator thật.

Khi nào dùng:

  • ✅ Test user flows
  • ✅ Test end-to-end scenarios
  • ✅ Test performance
  • ✅ Test trên real devices

Ví dụ:

[object Object]

Setup Integration Test:

[object Object]

Chạy Integration Test:

[object Object]

So sánh 3 loại Test

Tiêu chí Unit Test Widget Test Integration Test
Tốc độ Rất nhanh Nhanh Chậm
Scope Function/Method Widget Toàn bộ app
Environment Isolated Test environment Real device
Cost Thấp Trung bình Cao
Coverage Business logic UI components User flows

Best Practices

1. Test Coverage

✅ Nên: Aim for 80%+ coverage
❌ Không nên: 100% coverage (không cần thiết)

2. Test Naming

[object Object]

3. Test Organization

[object Object]

4. Mocking

[object Object]

Nên viết bao nhiêu test và viết ở tầng nào

Câu hỏi này không có câu trả lời theo con số tuyệt đối, nhưng có cách suy nghĩ rõ ràng. Hãy chọn tầng test theo loại rủi ro:

  • SQL/ui sai, công thức sai, dữ liệu bị biến đổi sai — viết ở tầng đơn vị. Đây là tầng chạy nhanh nhất và cho phản hồi rõ nhất.
  • Màn hình hiển thị sai trạng thái, nút không hoạt động, luồng nhập liệu sai — viết ở tầng widget. Số lượng nên vừa phải, tập trung vào các luồng quan trọng.
  • Luồng từ đầu đến cuối — chỉ viết cho những đường đi chính như đăng nhập, thanh toán, đăng ký. Loại test này chậm và dễ hỏng, nên số lượng nên rất ít.

Một tỉ lệ hợp lý cho ứng dụng thực tế là rất nhiều test đơn vị, một số test widget cho những luồng quan trọng, và số ít test đầu–cuối. Nếu bạn đang viết nhiều test đầu–cuối hơn test đơn vị, bộ test sẽ chậm và bạn sẽ sớm bỏ qua nó.

Những thứ không nên test

Kiểm thử cũng có chi phí, và có những thứ không xứng với chi phí đó:

  • Mã của framework. Không cần kiểm tra rằng Column xếp con theo chiều dọc; đó là việc của Flutter.
  • Chi tiết trình bày thuần tuý như màu sắc hay khoảng cách, trừ khi dùng test ảnh mẫu một cách có chủ đích. Những thay đổi thiết kế sẽ làm test đỏ liên tục mà không phản ánh lỗi thật.
  • Mã tự sinh từ công cụ.
  • Những hàm chỉ gọi thẳng một hàm khác mà không thêm logic.

Nguyên tắc chung: nếu test chỉ lặp lại nội dung của code, nó không mang thêm thông tin nào về việc code có đúng hay không.

Quy ước khi viết test

Những quy ước nhỏ dưới đây giúp bộ test dùng được lâu dài, đặc biệt khi dự án có nhiều người:

  • Tên test mô tả hành vi, ví dụ "hiện thông báo lỗi khi email sai" thay vì "testEmail2". Tên là tài liệu đầu tiên của bộ test.
  • Mỗi test kiểm tra một việc. Một test khẳng định năm thứ sẽ rất khó chỉ ra nguyên nhân khi đỏ.
  • Không phụ thuộc thứ tự chạy. Trạng thái dùng chung giữa các test là nguồn gốc của những lần "chạy một mình thì xanh, chạy cả bộ thì đỏ".
  • Tránh giới hạn thời gian trong test, vì nó tạo ra lỗi không ổn định trên máy yếu.
  • Chạy test tự động trong quy trình đóng góp mã, vì test không được chạy thường xuyên thì sẽ xuống cấp nhanh.

Và một lời khuyên về con số bao phủ: đừng đặt mục tiêu "bao phủ bao nhiêu phần trăm" cho cả dự án. Hãy đặt mục tiêu theo phần quan trọng — tầng xử lý dữ liệu và luồng thanh toán, đăng nhập nên được bao phủ cao nhất.

Kết luận

3 loại testing trong Flutter:

  • ✅ Unit Test: Test business logic, nhanh, nhiều nhất
  • ✅ Widget Test: Test UI components, trung bình
  • ✅ Integration Test: Test user flows, chậm, ít nhất

Tóm tắt:

  1. Unit Test: Test functions, methods, classes
  2. Widget Test: Test widgets và interactions
  3. Integration Test: Test toàn bộ app flows
  4. Balance: Kết hợp cả 3 loại để có coverage tốt

Sử dụng đúng loại test sẽ giúp ứng dụng Flutter của bạn chất lượng và ổn định hơn! 🚀


Học Flutter bài bản theo lộ trình

Nếu bạn muốn học có người sửa bài thay vì tự ghép tài liệu, Flutter Hướng Nghiệp đào tạo theo 3 cấp:

Lớp online trực tiếp qua Zoom/Google Meet, có bản ghi lại — không bắt buộc đến cơ sở.
Xem lịch khai giảng hoặc so sánh 5 cách học lập trình mobile nếu còn phân vân.