Android Unit Test: Kiến Thức Cần Biết
Giới thiệu Unit Test
Unit Test
là công cụ kiểm thử chủ động từ phía Lập Trình Viên trên các đoạn code do mình viết ra. Trong Android chúng ta sẽ dùng JUnit
để viết các Unit Test của ứng dụng. Ngoài ra còn có thể sử dụng các thư viện khác để triển khai được dễ dàng hơn. Có 2 thư viện được sử dụng nhiều nhất là Mockito
, và Mockk
. Trong khóa học này bạn sẽ được hướng dẫn chi tiết sử dụng Mockk
để triển khai Unit Test
cho ứng dụng của mình.
Tầm quan trọng Unit Test
Có thể liệt kê ra hàng trăm lý do, nhưng mình sẽ chọn ra 3 lý do đáng giá nhất để liệt kê ra đây.
- Phát hiện lỗi logic sớm: Một nguyên tắc trong lập trình cho mọi lập trình viên là họ phải tự tay thực thi tất cả các logic được chính mình viết ra. Để đơn giản hóa việc này ta có thể dùng Unit Test để kiểm thử lại những logic do chính mình viết ra trước đó. Khi logic bị thay đổi sẽ làm ảnh hưởng đến Unit Test dẫn đến văng lỗi. Đây sẽ là 1 cảnh báo sớm cho Lập trình viên biết đường tìm ra lỗi và khắc phục trước khi mọi thứ đi quá xa.
- Tăng tự tin khi thay đổi code: Một điều thú vị là khi lượng Unit Test trong dự án của bạn nhiều, bạn sẽ rất tự tin trong các thay đổi của mình. Unit Test bắt đầu như 1 gánh nặng khi bạn phải double lượng công việc của mình lên vừa viết Logic vừa viết Test cho Logic. Tuy nhiên khi Unit Test đã đủ nhiều, nó trở thành vị thần bảo vệ cho những cập nhật của bạn trong quá trình phát triển Phần mềm.
- Điểm cộng để tăng lương, tăng level: Không cần giải thích quá dài dòng. Bạn giỏi hơn, cống hiến nhiều hơn, công ty sẽ trả bạn lương tốt hơn, cho bạn nhiều quyền hạn hơn.
Tư duy viết Testable Code
Code nào cũng test được, nhưng sẽ có những đoạn code dễ viết Unit Test hơn. Dưới đây là 1 vài tip dựa trên kinh nghiệm cá nhân của mình.
- Viết hàm ngắn gọn, với mục đích rõ ràng, cụ thể.
- Luôn dùng
data class
,primary variable
, vàInterface
để làmparams
của 1function
. Không sử dụng 1 Class cố định vì như vậy sẽ ảnh hưởng đến khả năng mở rộng của Code. - Mỗi function phải có ít nhất 2 Test:
test success
,test failed