Kiểm thử đơn vị là một khái niệm phổ biến đối với lập trình viên, đặc biệt là những người lập trình theo TDD, bạn có thể tham khảo thêm về TDD trong các bài viết liên quan trên Tạp chí Lập trình. Đối với nền tảng Android, các bạn đã biết rằng các ứng dụng được phát triển trên ngôn ngữ Java, điều đó cũng có nghĩa là Framework JUnit trên Java cũng được tích hợp trong việc phát triển ứng dụng. Bài viết dưới đây sẽ hướng dẫn sử dụng JUnit test cho kiểm thử đơn vị trên Android một cách cơ bản nhất.
Trước tiên, chúng ta cần phải tạo ra thứ gì đó để có thể kiểm thử được. Các bạn hãy khởi tạo một Android project với một cái tên gì tùy bạn. Vì đang viết bài cho Tạp Chí Lập Trình nên ở đây tôi sử dụng cái tên TapChiLapTrinh để tránh nhầm lẫn với hàng dài những project linh tinh khác đã viết trước đó. Trong project này, tôi sử dụng một lớp Calculator với phương thức add() để thực hiện tính tổng hai số nguyên cho trước.
Quá dễ phải không nào 😀 Và điều cần làm của chúng ta bây giờ là cần tạo một project cho việc kiểm thử phương thức add() này.
Tại trình đơn, chọn File > New > Other… Tại thư mục Android chọn Android Test Project và bấm Next sau đó điền tên project (ở đây tôi dùng cái tên là TestTapChiLapTrinh).
Tiếp tục Next, ở bảng thông tin tiếp theo, Eclipse sẽ đưa ra một danh sách các project hiện thời là các project nằm trong thư mục workspace (thư mục chứa các project) của các bạn. Chúng ta cần chọn project cần kiểm thử, ở đây chính là project TapChiLapTrinh.
Chúng ta có thể nhấn Finish luôn tại đây hoặc bấm Next để chọn SDK build cho project test. Các bạn có thể làm bước này nếu muốn build trên SDK thấp hơn, hoặc không muốn thì có thể nhấn Finish, Eclipse sẽ mặc định chọn phiên bản SDK cao nhất. Tôi Finish luôn với SDK Android 4.2.2.
Như vậy chúng ta đã có một project cho việc kiểm thử. Sẽ là khá mới lạ với các bạn đã quen sử dụng Junit trên Netbeans cho Java vì Unit Test được tích hợp ngay trong project đó.
Tại package mặc định của project TestTapChiLapTrinh, tôi sẽ tạo mới một lớp để viết các trường hợp kiểm thử và chạy kiểm thử (có một điểm thú vị mà tôi nhận ra đó là tên package sẽ giống với tên project cần kiểm thử có thêm đuôi “.test“)
Các bạn bấm chuột phải tại package, chọn New > JUnit Test Case
Tôi sử dụng tên TestCalculator để tạo lớp kiểm thử cho lớp Calculator tương ứng đã tạo trước đó.
Chú ý: Tại SuperClass, các bạn bấm Browse và tìm chọn AndroidTestCase (có thể gõ vào đó một vài từ, Eclipse sẽ gợi ý ra cho bạn). Mặc định khi khởi tạo sẽ là junit.framework.TestCase. Hoặc có thể thay đổi bằng cách kế thừa AndroidTestCase ngay trong lớp vừa mới tạo.
Ở đây tôi có chọn thêm hai lựa chọn nữa là các phương thức setup() và teardown(), sau đó nhấn Finish.
- setup(): nói một cách dễ hiểu, nó là phương thức được gọi đầu tiên trước khi tiến hành chạy các testcase. Đó là nơi bạn có thể cấu hình môi trường cho việc chạy test.
- tearDown(): là phương thức được gọi cuối cùng, sau khi các test case được chạy. Nó có nhiệm vụ “thu dọn chiến trường” để giải phóng bộ nhớ và thiết lập lại công cụ đo của JUnit .
Với lớp vừa mới tạo này, tôi viết thêm vào đó phương thức testAdd() để kiểm tra tính đúng đắn của phương thức add().
Việc khởi tạo đối tượng Calculator chúng ta viết trong phương thức setup(). Trong testAdd() chúng ta sử dụng phương thức assertEquals() để so sánh kết quả mong đợi (đối số đầu tiên) và kết quả thực tế trả về (đối số thứ hai).
Giờ chúng ta cần chạy test để kiểm tra xem có đúng 3 + 6 = 9 hay không? Biết đâu được lại ra kết quả khác thì sao? Các bạn bấm chuột phải trong class, trỏ đến Run As > Android Unit Test.
Mách nhỏ: Tốt hơn hết là các bạn nên chạy máy giả lập (Emulator) trước khi chạy test, Eclipse sẽ tự khởi động máy giả lập nếu chưa có máy nào được chạy sẵn. Sẽ đỡ tốn thời gian chờ đợi vì máy giả lập khởi động khá lâu.
Sau khi chạy testcase, bên cạnh thẻ Package Explorer sẽ xuất hiện thêm thẻ JUnit, nhấn chuột vào đó, và đây là kết quả 😀
Tất nhiên là 3 cộng 6 phải bằng 9 rồi. Nhưng nếu tôi thay 6 bằng 5 thì chuyện gì sẽ xảy ra?
Một màu đỏ chóe hiện lên, thứ mà cả tôi và bạn không mong muốn khi kiểm thử chương trình phải không 😀
Trên đây là một ví dụ nho nhỏ về kiểm thử đơn vị trên Android. Sẽ không có gì mới lạ với những ai đã quen sử dụng Junit trên Netbeans với Java.
Hi vọng sau bài viết này, các bạn mới bắt đầu và có thể chưa biết sử dụng Junit có thể bắt đầu viết kiểm thử cho chính mã nguồn của mình
Chúc các bạn thành công 😀
Các bạn có thể tham khảo tại: http://developer.android.com/tools/testing/testing_eclipse.html
Trong bài viết trên bạn hãy thử tìm thêm các trường hợp kiểm thử để chứng tỏ rằng phương thức Add như trong ví dụ là không hoạt động. Vậy phương thức Add thật sự sẽ phải viết như thế nào? Mời các bạn comment dưới bài viết này 😉
Trần Lê Hưng
Trường hợp giá trị truyền vào >= 65535
dung kieu long di