Nếu mới làm quen với việc phát triển nền tảng Android, bạn có thể xem ví dụ đầy đủ này về cách thêm một tệp nhị phân GTest hoàn toàn mới (đôi khi được gọi là kiểm thử "gốc") từ đầu, hữu ích để minh hoạ quy trình công việc điển hình có liên quan. Để biết thêm thông tin về khung GTest cho C++, hãy tham khảo trang web dự án GTest để biết thêm tài liệu.
Hướng dẫn này sử dụng Hello World GTest làm ví dụ. Bạn nên đọc toàn bộ mã để hiểu sơ về mã đó trước khi tiếp tục.
Quyết định vị trí nguồn
Thông thường, nhóm của bạn sẽ đã có một mẫu đã thiết lập về các vị trí cần kiểm tra trong mã và các vị trí cần thêm kiểm thử. Hầu hết các nhóm đều sở hữu một kho lưu trữ git hoặc chia sẻ một kho lưu trữ với các nhóm khác nhưng có một thư mục con chuyên dụng chứa mã nguồn thành phần.
Giả sử vị trí gốc cho nguồn thành phần của bạn là tại <component source
root>
, hầu hết các thành phần đều có thư mục src
và tests
bên dưới, cùng với một số tệp bổ sung như Android.mk
(hoặc được chia thành các tệp .bp
bổ sung).
Vì bạn đang thêm một chương trình kiểm thử hoàn toàn mới, nên có thể bạn sẽ cần tạo thư mục tests
bên cạnh thành phần src
và điền nội dung vào thư mục đó.
Trong một số trường hợp, nhóm của bạn có thể có thêm cấu trúc thư mục trong tests
do cần đóng gói nhiều bộ kiểm thử thành các tệp nhị phân riêng lẻ.
Trong trường hợp này, bạn cần tạo một thư mục con mới trong tests
.
Để minh hoạ, sau đây là bản phác thảo thư mục điển hình cho các thành phần có một thư mục tests
:
\
<component source root>
\-- Android.bp (component makefile)
\-- AndroidTest.xml (test config file)
\-- src (component source)
| \-- foo.cpp
| \-- ...
\-- tests (test source root)
\-- Android.bp (test makefile)
\-- src (test source)
\-- foo_test.cpp
\-- ...
và sau đây là bản phác thảo thư mục thông thường cho các thành phần có nhiều thư mục nguồn kiểm thử:
\
<component source root>
\-- Android.bp (component makefile)
\-- AndroidTest.xml (test config file)
\-- src (component source)
| \-- foo.cpp
| \-- ...
\-- tests (test source root)
\-- Android.bp (test makefile)
\-- testFoo (sub test source root)
| \-- Android.bp (sub test makefile)
| \-- src (sub test source)
| \-- test_foo.cpp
| \-- ...
\-- testBar
| \-- Android.bp
| \-- src
| \-- test_bar.cpp
| \-- ...
\-- ...
Bất kể cấu trúc là gì, bạn sẽ điền sẵn các tệp tương tự như nội dung trong thư mục native
vào thay đổi trong tệp gerrit mẫu vào thư mục tests
hoặc thư mục con mới tạo. Các phần dưới đây sẽ giải thích chi tiết hơn về từng tệp.
Mã nguồn
Hãy tham khảo Hello World GTest để biết ví dụ.
Mã nguồn cho ví dụ đó được chú thích tại đây:
#include <gtest/gtest.h>
Tệp tiêu đề bao gồm cho GTest. Phần phụ thuộc tệp bao gồm được tự động giải quyết bằng cách sử dụng BUILD_NATIVE_TEST
trong tệp makefile.
#include <stdio.h>
TEST(HelloWorldTest, PrintHelloWorld) {
printf("Hello, World!");
}
GTests được viết bằng macro TEST
: tham số đầu tiên là tên trường hợp kiểm thử và tham số thứ hai là tên kiểm thử. Cùng với tên tệp nhị phân kiểm thử, chúng tạo thành hệ phân cấp sau trong trang tổng quan về kết quả:
<test binary 1>
| \-- <test case 1>
| | \-- <test 1>
| | \-- <test 2>
| | \-- ...
| \-- <test case 2>
| | \-- <test 1>
| | \-- ...
| \-- ...
<test binary 2>
|
...
Để biết thêm thông tin về cách viết kiểm thử bằng GTest, hãy tham khảo tài liệu về GTest
Tệp cấu hình đơn giản
Mỗi mô-đun kiểm thử mới phải có một tệp cấu hình để hướng dẫn hệ thống xây dựng bằng siêu dữ liệu mô-đun, các phần phụ thuộc tại thời điểm biên dịch và hướng dẫn đóng gói. Trong hầu hết các trường hợp, bạn chỉ cần sử dụng tuỳ chọn tệp Blueprint dựa trên Soong. Hãy xem phần Cấu hình kiểm thử đơn giản để biết thông tin chi tiết.
Tệp cấu hình phức tạp
Thay vào đó, để sử dụng Trade Federation, hãy viết một tệp cấu hình kiểm thử cho bộ kiểm thử của Android, Trade Federation.
Cấu hình kiểm thử có thể chỉ định các tuỳ chọn thiết lập thiết bị đặc biệt và đối số mặc định để cung cấp lớp kiểm thử.
Tạo bản dựng và kiểm thử cục bộ
Đối với các trường hợp sử dụng phổ biến nhất, hãy sử dụng Atest.
Đối với các trường hợp phức tạp hơn đòi hỏi phải tuỳ chỉnh nhiều hơn, hãy làm theo hướng dẫn đo lường.