2013-08-08 52 views
15

Làm cách nào để chạy thử nghiệm đơn vị trên mã gốc của Android (native C/C++, không phải là Java)? Cho đến nay tôi chỉ tìm thấy one câu hỏi tương tự, và câu trả lời cho biết sử dụng junit với JNI, mà tôi không muốn làm (thêm các cuộc gọi JNI có vẻ phức tạp không cần thiết để kiểm tra đơn vị, và không thực sự là một thử nghiệm đơn vị của mã gốc dù sao).Thử nghiệm đơn vị trên Android NDK

CppUnit (cũng được đề xuất ở đó) thực sự hoạt động trên Android phải không? Lưu ý rằng tôi muốn các thử nghiệm chạy tự nhiên trên thiết bị chứ không phải trên môi trường phát triển máy chủ lưu trữ. This trông giống như một cổng Android, có đáng xem không?

Khung kiểm tra chính thức của Google như googletest sẽ là lý tưởng, nhưng điều đó dường như không hoạt động với NDK.

Trả lời

11

tôi sử dụng googletest qua NDK tôi sử dụng một $ (gọi nhập module để mang lại .so chính và sau đó có một tập tin duy nhất trong thực thi giống như

int main(int argc, char *argv[]) 
{ 
#if RUN_GTEST 
    INIT_GTESTS(&argc,(char**)argv); 
    RUN_ALL_GTESTS(); 
#endif 
} 

Và sau đó tôi xây dựng rằng với BUILD_EXECUTABLE, triển khai nó thích:

find libs/ -type f -print -exec adb push {} /data/local/tmp \; 

và chạy nó như

adb shell LD_LIBRARY_PATH=/data/local/tmp:/vendor/lib:/system/lib /data/local/tmp/gtest 

Vì vậy, nó doesn' t kiểm tra vòng đời ứng dụng nhưng nó kiểm tra tất cả các bài kiểm tra đơn vị.

Nếu tôi cần kiểm tra điều gì đó với giao diện người dùng, tôi có thể làm điều gì đó tương tự nhưng thực hiện chức năng gốc là gì và gọi nó khi hoạt động được tải.

+0

Cảm ơn! Chúng tôi sẽ kiểm tra điều này. Tôi đã không nhận ra rằng bạn có thể xây dựng thực thi quá. – Indivara

+0

Ngoài ra, bạn có thể tạo và liên kết gtest_main.cc. – PSyton

+0

Giả sử rằng tôi muốn thực sự sử dụng các cuộc gọi JNI, làm thế nào tôi có thể nhận hoặc tạo JavaVM *? – syvex