Tải bản đầy đủ (.pdf) (42 trang)

Bài 1: Khái niệm cơ bản về kiểm thử ứng dụng Android

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.05 MB, 42 trang )

Bài 1:

Khái niệm cơ bản về
kiểm thử ứng dụng Android

TEST VÀ TRIỂN KHAI ỨNG
DỤNG ANDROID - Bài 1


Nộ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


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 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



Sự 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 để đảm
bả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


Thao 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ểm
thử
 Các thao tác này nên được kiểm thử trong mức hệ thống
cấp thấp, hoặc cấp cao thông qua Content Provider, hoặc
kiểm thử từ chính ứng dụng


Kiể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ên
Google 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 ra
các giải pháp thích hợp
 Bạn nên kiểm thử các phần sau:
 Network capabilities
 Screen densities
 Screen resolutions
 Screen sizes

 Availability of sensors
 Keyboard
 GPS
 External storage


Các loại kiểm thử
 Kiểm thử có thể xảy ra ở mọi giai đoạn trong phát triển
phần mềm
 Tuy nhiên, bạn nên kiểm thử ở các giai đoạn đầu tiên, thậm
chí có thể trước khi tập hợp đầy đủ yêu cầu và trước khi
tiến hành viết mã
 Có một số kiểu kiểm thử phụ thuộc vào đối tượng bị kiểm
thử. Đối với mọi loại kiểm thử, một test nên kiểm tra điều
kiện và trả về kết quả đánh giá là giá trị kiểu Boolean miêu
tả kiểm thử thành công hay thất bại


Kiể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ểm
thử 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ại
kiể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ểm

thử, được viết bởi Erich Gamma và Kent Beck


Ví dụ về kiểm thử đơn vị (unit test)


Các thành phần của test case
 Test fixture định nghĩa baseline để chạy kiểm thử và được
chia sẻ bởi tất cả test case, đóng vai trò quan trọng trong
thiết kế test. Thông thường, nó là tập hợp các biến, theo
chuẩ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ụng
bở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


Cá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ủa
phươ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 ra
một ngoại lệ nếu điều kiện không thỏa mãn



Các test thực tế
 Các phương thức có thể được nạp chồng hỗ trợ nhiều
tham số khác nhau, bao gồm:
 assertEquals()
 assertFalse()
 assertNotNull()
 assertNotSame()
 assertNull()
 assertSame()
 assertTrue()
 fail()


Android 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


Cá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ông
dùng Android API
 Sử dụng Android JUnit Extension để kiểm thử các thành
phần Android


Các đặc trưng chính của Android testing framework

 Android JUnit extension cung cấp các lớp test case hướng
thà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ới
hoặc kỹ thuật để thiết kế hoặc xây dựng test


Cá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 để stresstesting UI bằng cách gửi sự kiện ngẫu nhiên tới thiết bị


Các đặc trưng chính của Android testing framework


Cấ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ủa
test, 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



Cấ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


Test 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ủa
test project


Mock 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
 MockApplication

 MockContentProvider
 MockContentResolver
 MockContext
 MockCursor
 MockDialogInterface
 MockPackageManager
 MockResources


O

DEM

Giới thiệu Android testing Project


Kiể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ư:
 click
 drag
 long click
 scroll
 tap

 touch


Eclipse hỗ trợ Junit
 Eclipse và Android ADT plugin hỗ
trợ Junit đầy đủ và cho phép tạo
Android testing project
 Ví dụ: Eclipse chạy 18 test trong
20.008 giây, 0 Errors và 0 Failures
 Nếu có lỗi Failure Trace sẽ hiển thị
thông tin


Cá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 ()


×