2015-05-06 27 views
10

Có cách nào tốt để kiểm tra mã kết quả và dữ liệu trong thử nghiệm Android Espresso không? Tôi đang sử dụng Espresso 2.0.Tôi làm cách nào để thử nghiệm setResult() trong thử nghiệm Android Espresso?

Giả sử tôi có Activity được gọi là BarActivity.class, khi thực hiện một số hành động, hãy gọi setResult(int resultCode, Intent data) với trọng tải phù hợp.

Tôi muốn viết trường hợp kiểm tra để xác minh resultCodedata. Tuy nhiên, vì setResult() là phương pháp final, tôi không thể ghi đè lên.

Một số tùy chọn tôi nghĩ về là:

  • Xác định một phương pháp mới như setActivityResult() và chỉ sử dụng mà để nó có thể bị chặn, vv ...
  • Viết một bài kiểm tra chỉ TestActivity rằng sẽ gọi startActivityForResult() trên BarActivity và kiểm tra kết quả trong TestActivity.onActivityResult()

đang cố gắng để suy nghĩ những gì ít của hai tệ nạn, hoặc nếu có bất kỳ lời đề nghị khác về cách để kiểm tra cho việc này. Bất kỳ đề xuất? Cảm ơn!

+0

Dưới đây là giải pháp một phần cho tùy chọn 2: https://product.reverb.com/2016/03/12/testing-android-activity-results/ Tuy nhiên, chưa hoàn thành, ít nhất tôi đã không quản lý để thực hiện nó hoạt động. – friedger

Trả lời

5

Nếu bạn sẵn sàng để nâng cấp lên 2.1, sau đó hãy nhìn vào Espresso-Intents:

Sử dụng API có ý định (em họ của Mockito.when), bạn có thể cung cấp một câu trả lời cho các hoạt động mà bạn khởi động với startActivityForResult

này về cơ bản có nghĩa là nó có thể để xây dựng và trả lại bất kỳ kết quả khi một hoạt động cụ thể được đưa ra (trong trường hợp của bạn BarActivity lớp).

Kiểm tra ví dụ này ở đây: https://google.github.io/android-testing-support-library/docs/espresso/intents/index.html#intent-stubbing

Và cũng my answer về một vấn đề nào tương tự (nhưng với các hoạt động chọn liên lạc), trong đó tôi thấy làm thế nào để xây dựng kết quả và gửi nó trở lại Hoạt động đó được gọi là startActivityForResult()

+2

Tôi không thấy cách kiểm tra phương thức setResult bằng Espresso-Intents. Bạn có thể làm rõ? – friedger

10

Nếu khi đó bạn chuyển sang mới nhất Espresso, phiên bản 3.0.1, bạn chỉ có thể sử dụng một ActivityTestRule và nhận được kết quả Hoạt động như thế này:

assertThat(rule.getActivityResult(), hasResultCode(Activity.RESULT_OK)); 
assertThat(rule.getActivityResult(), hasResultData(IntentMatchers.hasExtraWithKey(PickActivity.EXTRA_PICKED_NUMBER))); 

Bạn có thể tìm thấy ví dụ làm việc here.

+1

Đây chắc chắn là cách sạch nhất miễn là bạn có thể truy cập 3.0.1. – skeeve

+0

Nếu không thể giải quyết 'hasResultCode' và' hasResultData'. Thêm 'androidTestCompile 'com.android.support.test.espresso: espresso-contrib: 3.0.1'' vào build.gradle – Paglian

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