KIỂM THỬ VÀ TRIỂN KHAI ỨNG
DỤNG ANDROID
Bài 6: Sử dụng Robolectric
để kiểm thử ứng dụng
Android
Nội dung bài học
Tổng quan về Robolectric
Cấu hình Robolectric
Khởi tạo thành phần khác
2
Tổng quan về Robolectric
Robolectric là framework cho phép chạy các unit test trên
JVM (java virtual machine)
Giả lập Android framework chứa trong file android.jar
Cho phép kiểm thử ứng dụng Android trong môi trường
tích hợp liên tục mà không cần cấu hình phức tạp
Tổng quan về Robolectric
Robolectric hỗ trợ quản lý tài nguyên
Có thể sử dụng findViewById() để tìm kiếm view
Trang chủ của robolectric:
Robolectric dựa trên JUnit4 framework
Robolectric không phải test framework tích hợp
Shadow object
Robolectric thay thế các lớp Android bằng các đối tượng
shadow object
Nếu một phương thức được miêu tả bởi Robolectric,
phương thức sẽ được chuyển tiếp tới shadow object
Shadow object hoạt động tương tự như các đối tượng của
Android SDK
Nếu một đối tượng không được mô tả bởi shadow object,
sẽ trả lại giá trị mặc định, null hoặc 0
Cài đặt Robolectric
Cài đặt Robolectric đòi hỏi Robolectric và JUnit 4 Jars trong
classpath
Bạn cài bổ sung android.jar trong thư mục cài đặt Android
SDK tới classpath của test project
Tải robolectric-X.X.X-jar-with-dependencies.jar từ website
Robolectric from sonatype
O
DEM
Cài đặt và cấu hình Robolectrict
Cấu hình project Robolectric
Test Annotation
@RunWith
@Config
@RunWith
Để chạy kiểm thử trong Robolectric, phải thông báo cho
JUnit bằng cách sử dụng annotation @RunWith trong lớp
kiểm thử
@Config
Chỉ dẫn Robolectric cấu hình Android theo cách khác cho
lớp kiểm thử hoặc phương thức bất kỳ
O
DEM
Kiểm thử sử dụng Robolectric
Robolectric.shadowOf()
Các lớp Android thi thoảng không cung cấp phương thức
truy cập trạng thái của đối tượng Android khi kiểm thử
Phương thức Robolectric.shadowOf() cung cấp tham chiếu
tới shadow instance đại diện cho đối tượng Android
Robolectric.shadowOf()
Ví dụ ứng dụng khởi tạo drawable resource id cho
ImageView như sau:
Robolectric.shadowOf()
Android không cung cấp phương thức để truy cập tới
drawable resource id của ImageView.
Sử dụng đối tượng ShadowImageView của Robolectric để
truy cập drawable resource id
O
DEM
Cấu hình Robolectric
Có nhiều cách để cấu hình Robolectric khi chạy chương
trình
System Properties
Robolectric Config File
project.properties File
System Properties
Cấu hình sử dụng các thuộc tính sau:
robolectric.strictI18n: thiết lập “true” để kích hoạt i18nstrict mode
robolectric.logging: gồm có các giá trị stdout, stderr
hoặc tên file
robolectric.offline (mới trong version 2.4): thiết lập true
để disable runtime fetching jars từ Maven
robolectric.dependency.dir (mới trong version 2.4): đối
với offline mode, xác định folder chứa runtime
dependency như Android jar
Robolectric Config File và project.properties File
Bạn có thể thiết lập giá trị mặc định cho bất kỳ item nào
trong đối tượng Config bao gồm file thuộc tính đặc biệt
trong classpath
Tên file phải là org.robolectric.Config.properties và chứa một
số giá trị cấu hình ví dụ như sau:
manifest=../myapp/AndroidManifest.xml
shadows=my.package.ShadowFoo
Robolectric Config File và project.properties File
Nếu project có chứa ApkLibs, phải thiết lập đúng với
Robolectric. Khi đó phải sử dụng file project.properties để
khai báo dependency cho Robolectric
target=android-<android API level to target>
android.library.reference.1=
dependency>
android.library.reference.2=
dependency>
Khởi tạo các thành phần khác
Trong Android có thể dễ dàng khởi tạo service và activity
thông qua tương tác người dùng
Robolectric không thể khởi tạo các thành phần này
Bạn chỉ có thể viết code để kiểm tra xem các thành phần
này đã khởi tạo chưa
Khởi tạo các thành phần khác
Ví dụ có activity layout như sau thể hiện màn hình welcome
screen
Khởi tạo các thành phần khác
Khi người dùng click vào button, sẽ di chuyển người dùng
đến LoginActivity
Khởi tạo các thành phần khác
Để kiểm tra, bạn có thể kiểm tra khi người dùng click vào
Login button, chúng ta sẽ khởi tạo intent phù hợp
Bởi vì Robolectric là unit testing framework, do đó
LoginActivity không thể được khởi tạo trong thực tế, do đó
ta kiểm tra xem WelcomeActivity có khởi tạo đúng content
hay không
Kiểm tra Service tương tự như kiểm tra Activity bằng cách sử
dụng phương thức getNextStartedService() trong
ShadowActivity
Khởi tạo các thành phần khác