44

Tự hỏi lựa chọn nào tốt hơn để viết các trường hợp kiểm tra đơn vị cho ứng dụng và thư viện Android: Sử dụng thư viện Robolectric hoặc gắn bó với khung kiểm tra Android. Tôi muốn chạy bộ kiểm thử tại dòng lệnh và muốn nó độc lập với nhu cầu cấu hình trình giả lập hoặc cho phép một thiết bị gắn liền với máy xây dựng. Có ai trong số các bạn chạy một phân tích so sánh về cả hai điều này hay cái gì tốt hơn? Kinh nghiệm của bạn sẽ tuyệt vời giúp tôi quyết định giải pháp tốt hơn.Tự động hóa thử nghiệm đơn vị Android: Khung thư thoại Robolectric và khung kiểm tra Android

+1

Câu hỏi này khá cũ. Khi tôi đọc [tài liệu] (https://developer.android.com/training/testing/index.html) ngay bây giờ, có vẻ như khung kiểm tra Android là con đường để đi. Đây không phải là dòng lệnh, nhưng đối với những người mới bắt đầu, [đây là một số ví dụ] (http://stackoverflow.com/a/43626962/3681880). – Suragch

Trả lời

93

tôi sử dụng một hệ thống tầng, nơi tôi thích tầng trước khi có thể:

  1. kiểm tra đơn vị tinh khiết. Tôi cố gắng tạo nhiều mã nhất có thể hoàn toàn độc lập với API Android và sau đó sử dụng các kiểm tra đơn vị "thuần túy" có thể chạy trên bất kỳ JVM nào. Các bài kiểm tra này là nhanh nhất và giúp giữ mã không cần phải là thiết bị di động dành riêng cho Android.
  2. Thử nghiệm đơn vị được hỗ trợ bởi Robolectric. Trong trường hợp mã của tôi chỉ phụ thuộc nhỏ vào API Android, điều đó có thể được thỏa mãn bởi bóng tối Robolectric, tôi thử nghiệm nó với Robolectric. Có nhiều thời gian thiết lập hơn cho Robolectric so với các thử nghiệm thuần túy, nhưng nó vẫn nhanh hơn bắt đầu/chạy trên trình giả lập.
  3. Kiểm tra khung Android. Trường hợp Robolectric không cắt nó - hoặc bởi vì các shadow không tồn tại, hoặc bởi vì tôi sử dụng nhiều API Android (và do đó muốn thử nghiệm với Real Thing) - tôi viết test chạy trên trình mô phỏng/thiết bị với khung mặc định.

Điểm của các tầng là giữ mọi thứ đơn giản nhất có thể, giúp giữ cho bộ đầy đủ nhanh hơn và giúp quảng bá mã rõ hơn.

+1

Bạn có tạo nhiều dự án thử nghiệm chuyên dụng không? – bianca

+1

Tôi đã sử dụng chỉ hai dự án: một cho cả hai loại kiểm tra đơn vị (tinh khiết và Robotium), một cho các bài kiểm tra khuôn khổ. –

+0

Cảm ơn bạn một lần nữa! Bạn có sử dụng bất kỳ công cụ bảo vệ mã nào không? – bianca

5

tôi làm việc trên cả hai, những gì tôi tìm thấy là: -

1) Robolectric không hỗ trợ API 19, nó đề cập đến trong tài liệu của nó - http://robolectric.org/eclipse-quick-start/. Đó là một tuyệt vời bất lợi của nó.

2) Chạy Robolectric trên JVM không phải trên DVM. Vì vậy, chúng tôi không thể phát hiện rằng vào thời điểm cụ thể đó GPS được bật trong thiết bị hoặc không v.v. Chúng tôi chỉ có thể chuyển giá trị được quyết định trước của chúng tôi cho nó.

3) Viết mã trong Robolectric phức tạp hơn so với junit đặc biệt cho đoạn có rất nhiều phức tạp và các vấn đề.

4) Robolectric cần jar bên ngoài và cấu hình và để kiểm tra junit chúng tôi không cần bất kỳ thư viện bên ngoài.

5) Robolectric là nhanh hơn vì nó chạy trên JVM nhưng điều này có bất lợi quá, chúng tôi không thể nhìn thấy giao diện người dùng trên thiết bị của chúng tôi, mã màn hình đang thực thi.

Đối với Android, tôi thích thử nghiệm jUnit.

Các vấn đề liên quan