Cách kiểm tra Dự án thư viện Android


97

Tôi đang viết một Dự án thư viện Android dựa trên lớp Bitmap của Android (gọi nó là AndroindLib) chỉ chứa lớp tiện ích (không có hoạt động). Tôi đã cố gắng kiểm tra nó bằng Android JUnit, nhưng nó vẫn tiếp tục phàn nàn rằng không thể tìm thấy AnroidLib.apk

Cách phù hợp để kiểm tra Đơn vị Dự án Thư viện Android là gì?


1
Hoặc ( cảnh báo plug-in xấu hổ ) bạn có thể sử dụng một dự án mà tôi đã tạo: Android Library Test Harness (cái mà tôi muốn gọi là "Alt H"). Nó có sẵn dưới dạng git repo: gitorious.org/alth Dự án vẫn đang trong quá trình phát triển và tài liệu hơi thưa thớt vì vậy hãy liên hệ với tôi nếu bạn có bất kỳ câu hỏi nào.
i41

Câu trả lời:


75

Trích dẫn tài liệu :

"Có hai cách được đề xuất để thiết lập kiểm tra trên mã và tài nguyên trong dự án thư viện:

  • Bạn có thể thiết lập một dự án thử nghiệm để thiết lập một dự án ứng dụng phụ thuộc vào dự án thư viện. Sau đó, bạn có thể thêm các bài kiểm tra vào dự án cho các tính năng dành riêng cho thư viện.

  • Bạn có thể thiết lập một dự án ứng dụng tiêu chuẩn phụ thuộc vào thư viện và đưa thiết bị đo vào dự án đó. Điều này cho phép bạn tạo một dự án độc lập chứa cả các bài kiểm tra / công cụ và mã để kiểm tra. "


27
vì vậy về cơ bản tất cả những gì bạn phải làm là thêm thư viện vào dự án thử nghiệm của mình và kiểm tra dự án thử nghiệm.
njzk2

Liên kết không còn hợp lệ, bất kỳ cơ hội nào bạn có thể chỉ cho chúng tôi đến liên kết hiện tại?
Abdullah Jibaly


4
Không chắc liệu có ai khác đã thành công với những đề xuất này hay không nhưng tôi thì chưa. Đã thử giải pháp thứ hai trước tiên và khi tôi cố gắng chạy trong Eclipse, tôi nhận được những điều sau: <ProjectName> không chỉ định thiết bị android.test.IusalmentationTestRunner hoặc không khai báo thư viện using android.test.runner trong AndroidManifest.xml của nó. Điều này là mặc dù thực tế là tôi đã thêm cả phần tử thiết bị và thư viện sử dụng vào Manifest của mình.
Bellinghammer

2
Có cách thứ hai (và cách làm việc ưa thích). Điều rất quan trọng là bạn phải có được các phần tử thư viện sử dụng và thiết bị đo đạc ở đúng vị trí trong tệp kê khai của mình. Phần tử thiết bị đo là phần tử con của phần tử tệp kê khai gốc và phần tử thư viện sử dụng là phần tử con của phần tử ứng dụng. Tôi đang đặt thư viện use bên dưới phần tử tệp kê khai và kết thúc với thông báo lỗi ở trên khi cố gắng chạy thử nghiệm.
Bellinghammer

17

Trong dự án thử nghiệm của bạn, chỉ cần thay đổi tên gói sao cho nó giống với gói thư viện của bạn. Ví dụ, bạn có một thư viện có gói "com.example.lib". Tạo một dự án thử nghiệm nhắm mục tiêu đến thư viện của bạn. Trong tệp kê khai, bạn sẽ thấy package="com.example.lib.test"targetPackage="com.example.lib". Chỉ cần thay đổi gói từ "com.example.lib.test" thành "com.example.lib" ( targetPackagegiữ nguyên).

Ngoài ra, hãy đảm bảo rằng thư viện được tham chiếu đến dự án thử nghiệm của bạn KHÔNG trong đường dẫn xây dựng Java, mà là thư viện Android thông thường: trong Eclipse, nó phải được hiển thị dưới dạng thư viện trong Project->Properties->Androidtab, nhưng không phải trong Project->Properties->Java Build Pathtab.

Sau đó, bạn chạy thử nghiệm.


Ý tưởng của bạn có ý nghĩa đối với tôi, vì vậy mà thử nghiệm đã nhắm mục tiêu chính nó (dưới dạng ứng dụng) và ứng dụng được liên kết với thư viện .... nhưng tôi không thể làm cho nó hoạt động thông qua ant build hay IntelliJ .... như .apk (dự kiến cho các ứng dụng được thử nghiệm) không tồn tại khi nó cố gắng để cài đặt nó, vì nó đã được biên soạn để "thử nghiệm / bin /.- debug.apk"
Andrew Mackenzie

Tôi đã làm cho nó hoạt động bằng cách chỉ thay đổi tên gói của dự án thử nghiệm trong tệp kê khai của nó (và gói đang được thử nghiệm - phải giống nhau) để KHÔNG trùng với tên gói của dự án thư viện, cộng với việc xóa tham chiếu đến thử nghiệm đích dự án trong tệp ant.properties.
Andrew Mackenzie

1
Tôi nghĩ rằng đây là một câu trả lời tốt hơn câu trả lời được chấp nhận, điều đó chỉ lặp lại tài liệu - IMHO.
Andrew Mackenzie


5

Theo tài liệu :

Kiểm tra mô-đun thư viện cũng giống như kiểm tra một ứng dụng. Sự khác biệt chính là thư viện và các phụ thuộc của nó được tự động đưa vào làm phụ thuộc của APK thử nghiệm. Điều này có nghĩa là APK thử nghiệm không chỉ bao gồm mã của riêng nó mà còn bao gồm AAR của thư viện và tất cả các phụ thuộc của nó. Vì không có "ứng dụng đang thử nghiệm" riêng biệt, tác vụ androidTest chỉ cài đặt (và gỡ cài đặt) APK thử nghiệm. Khi hợp nhất nhiều tệp kê khai, Gradle tuân theo thứ tự ưu tiên mặc định và hợp nhất tệp kê khai của thư viện vào tệp kê khai chính của APK thử nghiệm.


nhiệm vụ nào để chạy thử nghiệm? bài kiểm tra gradle, hoặc gradle androidTest? androidTest không phải là một nhiệm vụ.
Sunnyday

nhưng các công cụ như Phòng thí nghiệm kiểm tra Firebase yêu cầu APK hoặc AAB và không chấp nhận tệp AAR là kết quả đầu ra của tác vụ lắp ráp của thư viện
Mustafa Berkay Mutlu

1

LƯU Ý: Giải pháp này dựa trên việc sử dụng Eclipse Indigo (3.8.2) và có thể phải được triển khai hơi khác cho một IDE khác mặc dù các nguyên tắc cơ bản sẽ giống nhau.

Tôi đã gặp vấn đề tương tự và tôi thấy rằng những cách sau luôn hoạt động:

( LƯU Ý: Những hướng dẫn này dành cho việc xây dựng một nhóm dự án mới từ đầu. Nếu bạn đã xây dựng các phần của nhóm dự án, thì bạn có thể phải sửa đổi các dự án của mình để chúng kết nối theo cùng một cách. )

  1. Tạo dự án Thư viện Android mới bằng cách chọn hộp kiểm "Là Thư viện" trong khi tạo. (ví dụ: một dự án Android có tên "RemingtonAndroidTools").
  2. Xây dựng dự án Thư viện Android và xác minh rằng nó đã tạo một tệp jar trong thư mục bin. (ví dụ: tệp jar có tên "RemingtonAndroidTools.jar".)
  3. Tạo một Dự án Android trống để thử nghiệm ứng dụng Android sẽ hoạt động như một Ứng dụng thử nghiệm Android. (Ví dụ: một dự án Android có tên "RemingtonAndroidToolsTestApp"). Bạn sẽ không cần phải sửa đổi mã nguồn hoặc tài nguyên của dự án Ứng dụng thử nghiệm Android trừ khi bạn có thứ gì đó phải được thêm vào để thử nghiệm. Nhiều thứ có thể được kiểm tra mà không cần bất kỳ sửa đổi nào đối với Dự án ứng dụng thử nghiệm Android. Dự án Ứng dụng thử nghiệm Android là cầu nối giữa dự án Thư viện Android của bạn và dự án Android Junit giúp cho việc thử nghiệm dự án Thư viện Android thông qua Android Junit có thể thực hiện được.
  4. Chuyển đến tab Thư viện của Đường dẫn xây dựng Java cho dự án Ứng dụng thử nghiệm Android ("RemingtonAndroidToolsTestApp" trong ví dụ này).
  5. Thêm tệp jar ("RemingtonAndroidTools.jar" trong ví dụ này) của Dự án Thư viện Android ("RemingtonAndroidTools" trong ví dụ này) qua nút "Thêm Chum ...".
  6. Tạo dự án Kiểm tra Android mới (ví dụ: "RemingtonAndroidToolsTester") sẽ đóng vai trò là Trình kiểm tra thư viện Android và chọn dự án Ứng dụng kiểm tra Android ("RemingtonAndroidToolsTestApp" trong ví dụ này) làm mục tiêu.
  7. Chuyển đến tab Thư viện của Đường dẫn xây dựng Java cho dự án Trình kiểm tra thư viện Android ("RemingtonAndroidToolsTester" trong ví dụ này).
  8. Thêm tệp jar ("RemingtonAndroidTools.jar" trong ví dụ này) của Dự án Thư viện Android ("RemingtonAndroidTools" trong ví dụ này) qua nút "Thêm Chum ...".
  9. Tìm thư mục cuối cùng của gói Android của bạn trong dự án Trình kiểm tra thư viện Android (ví dụ: "danny.remington.remington_android_tools_test_app.test") và thêm một lớp kiểm tra (ví dụ: "MainActivityTest") kế thừa từ ActivityI Kinh nguyệtTestCase2.
  10. Chỉnh sửa lớp thử nghiệm ("TestActivityTest" trong ví dụ này) để sử dụng hoạt động (ví dụ: "TestActivity") của Ứng dụng Kiểm tra Android ("RemingtonAndroidToolsTestApp" trong ví dụ này) làm tham số cho ActivityI Kinh nguyệtTestCase2.
  11. Chỉnh sửa lớp kiểm tra ("TestActivityTest" trong ví dụ này) và tạo một phương thức khởi tạo mặc định thực hiện lệnh gọi đến super (Lớp) và chuyển vào lớp của Ứng dụng Kiểm tra Android ("TestActivity.class" chẳng hạn).

Bạn sẽ kết thúc với ba dự án (Thư viện Android, Ứng dụng kiểm tra Android, Trình kiểm tra thư viện Android) trông tương tự như sau:

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Bạn nên kết thúc với một lớp học để kiểm tra Thư viện Android của mình trông giống như sau:

package danny.remington.remington_android_tools_test_app.test;

import android.test.ActivityInstrumentationTestCase2;
import danny.remington.remington_android_tools_test_app.TestActivity;

/**
 * 
 */
public class TestActivityTest extends
      ActivityInstrumentationTestCase2<TestActivity> {

   public TestActivityTest() {
      super(TestActivity.class);
   }

}

Sau đó, bạn có thể thêm bất kỳ bài kiểm tra nào mà bạn muốn. Bạn sẽ không cần phải tham khảo thêm Ứng dụng kiểm tra Android ("RemingtonAndroidToolsTestApp" trong ví dụ này) để chạy các thử nghiệm của mình trừ khi chúng yêu cầu quyền truy cập vào một thành phần cụ thể của Android (chẳng hạn như thư mục Nội dung). Nếu bạn cần truy cập bất kỳ thành phần cụ thể nào của Android, bạn có thể làm như vậy bằng cách sửa đổi Ứng dụng kiểm tra Android ("RemingtonAndroidToolsTestApp" trong ví dụ này) và sau đó tham chiếu nó thông qua thiết bị được cung cấp bởi Android Junit API tiêu chuẩn. (Bạn có thể đọc thêm về điều đó tại đây: http://developer.android.com/tools/testing/testing_android.html )


0

Nếu các lớp ulitiy của bạn không phụ thuộc vào bất kỳ mã cụ thể nào của Android, bạn chỉ có thể sử dụng các bài kiểm tra đơn vị JUnit tiêu chuẩn. Không cần sử dụng các phiên bản Android.


2
Điều này không hoạt động vì JUnit tiêu chuẩn được biên dịch thành JVM tiêu chuẩn trong khi các tệp java Android được biên dịch sang máy ảo Dalvik.
Danny Remington - OMS
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.