24

Tôi đang viết một số bài kiểm tra chấp nhận cho một ứng dụng sử dụng lớp ActivityInstrumentationTestCase2. Tôi muốn gây ra một sự thay đổi định hướng từ bên trong bài kiểm tra để đảm bảo rằng một số điều xảy ra. Trong số những thứ này đảm bảo rằng trạng thái Hoạt động được giữ nguyên, nhưng tôi cũng muốn đảm bảo rằng bố cục thích hợp cho hướng được sử dụng.Làm cách nào để bạn buộc thay đổi hướng trong thử nghiệm Thiết bị Android?

Tôi biết tôi có thể chỉ cần kiểm tra onSaveInstanceState/onRestoreInstanceState/onPause/onResume/etc. các phương thức để đảm bảo trạng thái ví dụ được bảo toàn. Tuy nhiên, tôi đã tự hỏi nếu có thực sự là một cơ chế gây ra một sự kiện thay đổi định hướng?

Điều này có liên quan đến việc tiêm một loại sự kiện chuyển động nào đó để lừa thiết bị/trình giả lập suy nghĩ rằng nó đã được xoay hoặc có phương pháp thực tế nào được cung cấp bởi Thiết bị đo không?

Cảm ơn & Chúc mừng!

Trả lời

46

Bạn không thực sự phải sử dụng Robotium cho việc này. Trong thực tế, nếu bạn xem nguồn gốc của Robotium tất cả nó đang làm khi bạn gọi

solo.setActivityOrientation(Solo.LANDSCAPE); 

myActivity = this.getActivity(); // In your setUp method() 

... 

myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
+0

tuyệt vời, chuyển câu trả lời được chấp nhận cho bạn. Kudo cho công việc thám tử đến gặp bạn. – plainjimbo

+0

Robotium dường như ngắn hơn cho điều này. –

+6

Và có lẽ một người sẽ cần phải gọi 'getInstrumentation(). WaitForIdleSync();' sau đó để chờ sự thay đổi định hướng xảy ra bởi vì nó được thực hiện theo cách không đồng bộ. – Ognyan

3

Sử dụng Robotium cho nó. Có một lớp được gọi là Solo, sử dụng bạn có thể thay đổi hướng bằng cách chỉ cần gọi một phương thức:

solo.setActivityOrientation(Solo.LANDSCAPE); 

Vậy đó! Định hướng của bạn sẽ bị thay đổi. Bạn có thể google Robotium và lấy bình của nó và thêm nó vào dự án Thử nghiệm của bạn. Trang web Robotium cũng đưa ra một ví dụ về dự án thử nghiệm trên ứng dụng Notepad của Android (có sẵn như một dự án mẫu với Android SDK) cho thấy nó mạnh mẽ như thế nào và nó có thể được sử dụng dễ dàng như thế nào.

+0

Ồ, cảm ơn! Đã một thời gian kể từ khi tôi hỏi câu hỏi và nó đã thấy rất nhiều lượt xem. Điều này chắc chắn giải quyết được vấn đề tôi có. Robotium trông giống như một thư viện thử nghiệm tuyệt vời. – plainjimbo

+0

Có James, chắc chắn rồi! :) –

+0

Để xấu Robotium không hỗ trợ các mảnh vỡ. – Martin

5

Như AndrewKS viết bạn có thể sử dụng

getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
assertTrue(...); 

để yêu cầu thay đổi định hướng . Nhưng chính việc xoay vòng được thực hiện không đồng bộ. Để thực sự kiểm tra trạng thái sau thay đổi hướng bạn cần chờ một thời gian ngắn sau khi yêu cầu:

getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
Thread.sleep(50); // depends on performance of the testing device/emulator 
assertTrue(...); 
Các vấn đề liên quan