2015-12-24 14 views
6

Tôi gặp phải lỗi này trong khi thử nghiệm hoạt động khởi chạy bằng cách sử dụng espresso.Kiểm tra Espresso Không thành công: Muốn đối sánh 1 mục đích, Trên thực tế phù hợp với 2 mục đích

android.support.test.espresso.base.DefaultFailureHandler $ AssertionFailedWithCauseError: Muốn khớp 1 ý định. Trên thực tế phù hợp với 2 ý định.

Đáng ngạc nhiên các thử nghiệm khởi chạy hoạt động khác với cùng mã đang được chuyển.

@RunWith(AndroidJUnit4.class) 
public class HomeActivityTest { 

    @Rule 
    public final IntentsTestRule<HomeActivity> mHomeActivityRule = new IntentsTestRule<HomeActivity>(HomeActivity.class); 


    @Test 
    public void testFundTransferActivityStarted() { 

    onView(withId(R.id.button_fund_transfer)).perform(click()); 

    intended(hasComponent("mypackage.FundTransferActivity")); 
} 

} 

nút nhấp đơn giản là bắt đầu hoạt động FundTransfer bằng startActivity.

+0

Bạn cần thêm một đối số khác như trong ví dụ này 'dự định (allOf (hasAction (Intent.ACTION_DIAL), hasData (INTENT_DATA_PHONE_NUMBER))); } ' – piotrek1543

+0

là sự cố được giải quyết – piotrek1543

+0

@ piotrek1543 Chưa thử. Nhưng tại sao tôi cần phải thêm allOf? Tại sao nó phù hợp với hai ý định thay vì một? – SohailAziz

Trả lời

7

Bạn có thể dán thông báo lỗi đầy đủ mà bạn đã nhận không?

Thông báo lỗi cũng sẽ có cấu hình của 2 Intents trùng khớp. Nếu cả hai ý định đó có cấu hình giống nhau, điều đó có nghĩa là bạn đang gọi startActivity hai lần, nghĩa là, giữa thử nghiệm đã bắt đầu và kết thúc thử nghiệm. Câu trả lời dưới đây dành cho một trường hợp cụ thể khi bạn kết thúc gọi cùng một Intent hai lần.

Gọi hai lần là trường hợp hoàn toàn hợp pháp. Ví dụ,

Bước 1: gõ vào Button1 để khởi Gallery và chọn một hình ảnh và hiển thị trong ImageView1 (ban đầu ImageView1GONE và bây giờ nó là VISIBLE).
Bước 2: nhấn vào ImageView1 để khởi chạy lại Thư viện.

Bây giờ, nếu bạn muốn kiểm tra "Khai thác trên ImageView1 sẽ khởi chạy Thư viện", thì bạn không thể chỉ cần chạm vào ImageView1 vì ban đầu không hiển thị. Trước tiên, bạn cần nhấn vào Button1. Nếu bạn làm điều này, bạn cần khởi chạy Thư viện hai lần.

Do đó intended(hasComponent("mypackage.FundTransferActivity")); sẽ không hoạt động. Thay vào đó, hãy sử dụng: intended(hasComponent("mypackage.FundTransferActivity"), times(2));

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