Cần kiểm thử gì trong ứng dụng Android? Lý tưởng nhất là kiểm thử mọi dòng code trong ứng dụng Tuy nhiên, trong thực tế không cần thiết kiểm thử mọi phương thức, ví dụ không cần kiểm
Trang 2Nội dung bài học
• Các phần cần kiểm thử trong Android
• Các loại kiểm thử
• Android testing framework
• Tạo project kiểm thử
• Chạy project kiểm thử
2
Trang 3Cần kiểm thử gì trong ứng dụng Android?
Lý tưởng nhất là kiểm thử mọi dòng code trong ứng dụng
Tuy nhiên, trong thực tế không cần thiết kiểm thử mọi
phương thức, ví dụ không cần kiểm thử các getter và setter được Java Compiler sinh ra
Bên cạnh việc kiểm thử các hàm, một số khía cạnh khác
của ứng dụng Android mà chúng ta cần cân nhắc kiểm thử
Sự kiện vòng đời ứng dụng
Thao tác database và filesystem
Kiểm thử trên các loại thiết bị khác nhau
Trang 4Sự kiện vòng đời ứng dụng Android
Bạn nên kiểm thử các sự kiện vòng đời của Activity để đảmbảo các sự kiện được sử dụng hợp lý và đúng đắn
Nếu Activity của bạn lưu thông tin trạng thái của nó trong
sự kiện onPause() hoặc onDestroy() sau đó khôi phục
trong onCreate(Bundle savedInstanceState), bạn nên
kiểm tra trạng thái được lưu trữ và khôi phục chính xác
Sự kiện thay đổi cấu hình (configuration-changed event) nên được kiểm thử Sự kiện này được kích hoạt khi quay thiết bị Android
Trang 5Thao tác cơ sở dữ liệu và file hệ thống
Các thao tác cơ sở dữ liệu và file hệ thống nên được kiểmthử
Các thao tác này nên được kiểm thử trong mức hệ thốngcấp thấp, hoặc cấp cao thông qua Content Provider, hoặckiểm thử từ chính ứng dụng
Trang 6Kiểm thử trên nhiều loại thiết bị
Trước khi bàn giao phần mềm hoặc cập nhật ứng dụng lênGoogle Play, bạn phải kiểm thử phần mềm trên các loại
thiết bị khác nhau để phát hiện các bất thường và đưa racác giải pháp thích hợp
Bạn nên kiểm thử các phần sau:
Trang 7tả kiểm thử thành công hay thất bại
Trang 8Kiểm thử đơn vị (unit test)
Kiểm thử đơn vị được viết bởi lập trình viên
Phải phân tách thành phần được kiểm thử và có thể kiểmthử lặp đi lặp lại
Bạn nên sử dụng mock object để phân cách unit từ
dependency của nó để giám sát tương tác, và có thể lặp lạikiểm thử nhiều lần
Ví dụ: bạn kiểm thử thao tác xóa dữ liệu từ cơ sở dữ liệu, bạn không muốn dữ liệu được xóa thật và dữ liệu khôngđược tìm thấy trong lần kiểm thử tiếp theo
JUnit là chuẩn kiểm thử đơn vị cho Android Junit là
framework mã nguồn mở với mục đích tự động hóa kiểmthử, được viết bởi Erich Gamma và Kent Beck
Trang 9Ví dụ về kiểm thử đơn vị (unit test)
Trang 10Các thành phần của test case
Test fixture định nghĩa baseline để chạy kiểm thử và đượcchia sẻ bởi tất cả test case, đóng vai trò quan trọng trongthiết kế test Thông thường, nó là tập hợp các biến, theochuẩn đặt tên của Android, có tên bắt đầu bằng chữ m, ví
dụ mActivity
Phương thức setUp(): khởi tạo fixture Ghi đè nếu bạn
muốn tạo đối tượng và khởi tạo các trường được sử dụngbởi test Phương thức setUp xuất hiện trước tất cả các test
Phương thức tearDown(): hoàn thành fixture Ghi đè nếu
bạn muốn giải phóng khởi tạo các test Phương thức
tearDown được gọi sau tất cả các test
Trang 11Các test thực tế
Tất cả phương thức công khai (public method) với tên bắtđầu bằng test được xem như là một test
Ví dụ: testValues(), testConversionError(),
testConversionToString() là các tên test hợp lệ
Trong khi thi hành các điều kiện kiểm thử, giá trị trả về củaphương thức nên được so sánh với giá trị mong đợi
Junit cung cấp các phương thức assert* để so sánh giá trị
mong muốn với kết quả thực tế và sau khi chạy sẽ ném ramột ngoại lệ nếu điều kiện không thỏa mãn
Trang 13Android testing framework
Là một phần của môi trường phát triển ứng dụng
Cung cấp công cụ mạnh mẽ để kiểm thử mọi khía cạnh củaứng dụng
Trang 14Các đặc trưng chính của Android testing framework
Android test suite dựa trên JUnit
Sử dụng JUnit thuần túy để kiểm thử các lớp mà khôngdùng Android API
Sử dụng Android JUnit Extension để kiểm thử các thànhphần Android
Trang 15Các đặc trưng chính của Android testing framework
Android JUnit extension cung cấp các lớp test case hướngthành phần
Các lớp này cung cấp các phương thức để tạo mock object
và phương thức giúp bạn điều khiển vòng đời của một
thành phần
Test suite được chứa trong các gói kiểm thử, tương tự nhưcác gói ứng dụng chính do đó không cần học công cụ mớihoặc kỹ thuật để thiết kế hoặc xây dựng test
Trang 16Các đặc trưng chính của Android testing framework
Công cụ SDK để xây dựng test case và tiến hành kiểm thử
có sẵn trong Eclipse ADT, và cung cấp dạng command line cho các IDE khác
SDK cũng cung cấp monkeyrunner, API cho kiểm thử thiết
bị sử dụng các chương trình Python và UI/Application
Exerciser Monkey, công cụ command line dùng để testing UI bằng cách gửi sự kiện ngẫu nhiên tới thiết bị
Trang 17stress-Các đặc trưng chính của Android testing framework
Trang 18Cấu trúc kiểm thử (test structure)
Test project được tổ chức dưới dạng cấu trúc chuẩn củatest, lớp test case, test package
Android testing dựa trên Junit, các phương thức kiểm thửđược tổ chức trong một lớp gọi là các test case (hoặc test suite)
Mỗi test là một test độc lập của một module độc lập
Trang 19Cấu trúc kiểm thử (test structure)
Trong JUnit, bạn sử dụng test runner để thi hành lớp test
Trong Android, bạn sử dụng test tool để nạp các gói test (test package), sau đó các công cụ này thi hành test runner
cụ thể cho Android
Trang 20Test project
Các lợi ích của Android tool khi tạo test project bao gồm:
Tự động thiết lập gói kiểm thử sử dụng
InstrumentationTestRunner như là test runner
Bạn phải sử dụng InstrumentationTestRunner (hoặc lớp con) để chạy JUnit test
Sử dụng tên thích hợp cho test package Nếu ứng dụng
phải kiểm thử có tên gói là com.mydomain.myapp thì
công cụ Android sẽ thiết lập tên gói kiểm thử là
com.mydomain.myapp.test
Tự động tạo build file, manifest file, cấu trúc thư mục củatest project
Trang 21Mock object
Mock object bắt chước đối tượng được sử dụng thật thay
vì gọi các đối tượng thật để kích hoạt kiểm thử đơn vị
trong môi trường cách ly
Android testing framework cung cấp một số mock object giúp cho việc viết kiểm thử
Một số lớp trong gói android.test.mock
Trang 22DEM O
Giới thiệu Android testing Project
Trang 23Kiểm thử giao diện (UI test)
Chỉ main thread có thể thay đổi UI trong Android
Chú giải @UIThreadTest được sử dụng cho kiểm thử đặc
biệt chạy trên thread có khả năng thay đổi UI
Nếu bạn muốn chạy test trên UI thread, bạn nên sử dụng
phương thức Activity.runOnUiThread(Runable r) cung
cấp Runnable tương ứng chứa chỉ dẫn test
Lớp TouchUtils trợ giúp tạo UI test cho phép sinh ra các sự
kiện gửi tới View, như:
Trang 24Eclipse hỗ trợ Junit
Eclipse và Android ADT plugin hỗtrợ Junit đầy đủ và cho phép tạoAndroid testing project
Ví dụ: Eclipse chạy 18 test trong20.008 giây, 0 Errors và 0 Failures
Nếu có lỗi Failure Trace sẽ hiển thịthông tin
Trang 25Các IDE khác
Các IDE khác như ItelliJ và NetBean cung cấp các plugin tích hợp môi trường phát triển Android nhưng không hỗtrợ Junit một cách chính thức
Nếu bạn không sử dụng IDE, bạn có thể chạy các test sửdụng ant (http://ant.apache.org)
Trang 26Kiểm thử tích hợp
Kiểm thử tích hợp được thiết kế để kiểm thử khi các thànhphần độc lập làm việc chung với nhau
Thông thường Android Activity đòi hỏi một số tích hợp với
hạ tầng hệ thống Chúng cần vòng đời Activity cung cấpbởi ActivityManager, và truy cập tài nguyên, filesystem, và
Trang 27Kiểm thử chức năng và kiểm thử chấp nhận
Trong môi trường phát triển phần mềm linh hoạt (agile),
kiểm thử chức năng và kiểm thử chấp nhận được tạo bởi QA
Đây là các kiểm thử cấp cao để kiểm tra tính hoàn thiện vàđúng đắn của yêu cầu người dùng hoặc một chức năng cụthể
Các kiểm thử này được tạo ra thông qua sự cộng tác giữakhách hàng, chuyên gia phân tích nghiệp vụ, QA, tester vàngười phát triển
Một số framework và công cụ như FitNesse
(http://fitnesse.org) có thể tích hợp vào trong quá trình pháttriển ứng dụng Android để kiểm thử
Trang 28Kiểm thử chức năng và kiểm thử chấp nhận
Trang 29Kiểm thử hiệu năng phần mềm
Kiểm thử hiệu năng phần mềm đo cácyếu tố hiệu năng của các thành phần
Nếu ứng dụng yêu cầu hiệu năng cao, bạn cần đo hiệu năng trước và sau khitiến hành một số thay đổi
Trang 30Kiểm thử hệ thống
Hệ thống được kiểm thử tổng thể và tương tác giữa cácthành phần, phần mềm, phần cứng Thông thường, kiểmthử hệ thống bao gồm các lớp kiểm thử bổ sung sau:
GUI tests
Smoke tests
Performance tests
Installation tests
Trang 31Ký hiệu kiểm thử (test annotation)
Ký hiệu kiểm thử dùng để phân loại test và chạy các test độc lập:
Trang 32Tạo Android Testing project
Chọn File > New Project, chọn Android > Android Test
Project
Trang 33Tạo Android Testing project
Chọn Test Target
Trang 34Chạy kiểm thử
Chạy tất cả test từ Eclipse:
chọn Run As > Android Junit Test
Chạy một test case từ Eclipse:
chọn test project và chạy Run As | Run Configuration
Trang 35Chạy kiểm thử
Chạy kiểm thử từ Emulator: Mặc định emulator cài đặt sẵnứng dụng Dev Tools, trong ứng dụng này có sẵn tool
Instrumentation
Trang 36Chạy kiểm thử
Mặc định, các gói được hiển thị sử dụng instrumentation
mặc định là android.test.InstrumentationTestRunner.
Để đổi tên, bạn mở file AndroidManifest.xml, dưới tab
Instrumentation, đổi tên label
Trang 37Chạy kiểm thử
Trang 38 Chạy kiểm thử từ dòng lệnh (command line)
Trang 39Chạy kiểm thử
Trang 40DEM O
Chạy kiểm thử Android bằng dòng lệnh
Trang 41• Các phần cần kiểm thử trong Android
• Các loại kiểm thử
• Android testing framework
• Tạo project kiểm thử
• Chạy project kiểm thử
Tổng kết nội dung bài học