1. Tại sao phải sử dụng Mockito.
Các unit tests có thể sẽ phụ thuộc vào các class có fetch data từ web và cơ sở dữ liệu. Điều này bất tiền do một vài lý do:
- Việc fetch data từ web và cơ sở dữ liệu về sẽ chậm để thực hiện kiểm tra.
- Việc kiểm tra có thể bắt đầu lỗi nếu kết quả từ web và cơ sở dữ liệu là kết quả không được mong đợi. Điều này gọi là “flaky test”.
- Khó để kiểm tra tất cả các trường hợp thành công hay lỗi các hành động sử dụng web và cơ sở dữ liệu.
Vì vậy, chúng ta có thể sử dụng “mock” dependencies. Mocks cho phép mô phỏng web và cơ sở dữ liệu và trả về kết quả cụ thể tùy thuộc vào tình huống.
2. Các bước sử dụng Mockito package để kiểm tra.
Các bước bao gồm:
- Thêm các package vào pubspec.yaml.
- Tạo function để kiểm tra.
- Tạo file test với mock http.Client.
- Viết các test cho mỗi điều kiện.
- Chạy kiểm tra.
2.1. Thêm các package dependencies vào pubspec.yaml.
Thêm các package dependencies: http, mockito, build_runner với version mới nhất ( tham khảo trên trang pub.dev) vào file pubspec.yaml.
2.2. Tạo function để kiểm tra.
Ở ví dụ này, chúng ta tạo một unit test fetchAlbum function để lấy dữ liệu từ internet. Để kiểm tra function này, chúng ta cần 2 thay đổi đó là:
- Tham số của function phải có http.Client. Điều này cho phép cung cấp chính xác http.Client phụ thuộc trong trường hợp. Đối với Flutter và dự án web và cơ sở dữ liệu-side cung cấp http.IOClient. Đối với Browse apps, cung cấp http.BrowserClient. Đối với tests, cung cấp mock http.Client.
- Sử dụng client để lấy dữ liệu từ internet điều này tốt hơn là phương pháp http.get() trong việc làm giả.
2.3. Tạo file test với mock http.Client.
Tạo file fetch_album_test.dart trong folder test.
Thêm annotation @GenerateMocks([http.Client]) để main function tạo ra MockClient class với mockito. MockClient class được tạo ra sẽ thể hiện http.Client class. Điều này cho phép chúng ta có thể thực hiện fetchAlbum function và trả lại các kết quả khác nhau cho mỗi trường hợp test trong MockClient.
Các mocks được sinh ra sẽ được để trong .
Sau đó, trong command chạy: flutter pub run build_runner build để sinh ra mocks.
2.4. Viết các test cho mỗi điều kiện.
Ở ví dụ này, fetchAlbum() function sẽ trả về:
- Nếu http gọi thành công sẽ trả về Album()
- Nếu lỗi thì sẽ trả về Exception.
2.5. Chạy file tests.
Chúng ta chỉ việc ấn Run trong file tests trong thư mục test: …/test/fetch_album_test.dart.
3. Tổng kết
Trên đây là một số chia sẻ về việc sử dụng Unit test: Mock dependencies using Mockito cơ bản giúp cho việc kiểm tra các function thao tác với web và cơ sở dữ liệu dễ dàng hơn. Mong rằng qua bài viết sẽ giúp ích cho các bạn phần nào đó.
Cảm ơn các bạn đã đọc bài viết của mình.
Source code: https://github.com/falcon12795/unit_test
Tài liệu tham khảo: https://docs.flutter.dev/cookbook/testing/unit/mocking
Author: DuongVT19