2016-04-20 17 views
7

Tôi có hai ứng dụng tương tác với nhau thông qua các mục đích. Tôi muốn xác minh rằng giả sử Ứng dụng A gọi chính xác số startActivity cho Ứng dụng B mà không thực sự khởi chạy Ứng dụng B. Tôi đã thử các kết hợp khác nhau của intending và Espresso vẫn khởi chạy Ứng dụng B thông qua mục đích thay vì chỉ cắt nó ra. Điều này khiến các kiểm tra còn lại thất bại vì giao diện người dùng bị chặn bởi App B. Bất kỳ ý tưởng?Lỗi khi nhấn mạnh Intent với Espresso

@RunWith(AndroidJUnit4.class) 
@LargeTest 
public class MyActivityUiIntentsTest 
{ 

    @Rule 
    public IntentsTestRule<MyActivity> activityRule = 
      new IntentsTestRule<>(MyActivity.class, true, false); 

    @Test 
    public void shouldStartOtherActivityWhenButtonClicked() 
    { 
     Intents.init(); 
     intending(toPackage("my.package")) 
      .respondWith(new ActivityResult(Activity.RESULT_OK, null)); 

     activityRule.launchActivity(new Intent()); 

     onView(withId(R.id.viewId)).perform(click()); 
     intended(hasComponent(hasShortClassName("the.other.class.name"))); 

     Intents.release(); 
    } 
} 

CẬP NHẬT: Mã cho onClick:

@OnClick(R.id.viewId) 
public void startOtherActivity() 
{ 
    Intent intent = new Intent(); 
    intent.setClassName("my.package", "the.other.class.name"); 
    startActivity(intent); 
    finish(); 
} 
+1

Chúng ta có thể thấy đoạn mã để tạo Ý định trong onClick? Và bạn đã đăng nhập tên gói trên các mục đích? I. ý định của bạn không bắt đúng ý định – Blundell

+0

Đã thêm mã mẫu 'onClick'. – brwngrldev

+0

Bạn đang chạy phiên bản API thiết bị/emu nào? –

Trả lời

3

di chuyển mã intending... của bạn dưới đây launchActivity và loại bỏ .init()IntentsTestRule sẽ gọi init cho bạn sau khi hoạt động này được đưa ra

+0

Điều này đã khắc phục được sự cố, cảm ơn! – brwngrldev

2

Một trong những giải pháp khả thi là phải có gián tiếp cho ý định cử.

Ví dụ: chúng tôi có IntentDispatcher mà chúng tôi thay thế bằng cách thực hiện thử nghiệm trong các thử nghiệm ui chức năng qua mẹo với custom instrumentation test runner.

thực hiện thực của IntentDispatcher chỉ gọi context.startActivity() trong khi trong các thử nghiệm, chúng tôi bắt đầu hoạt động đặc biệt mà sẽ hiển thị tất cả nội dung của Intent vì vậy chúng tôi có thể xác minh rằng đó là Intent mà chúng tôi muốn để xử lý với quẹt Espresso.

Ngoài ra, chúng tôi đã viết nhiều quy tắc để xử lý những việc như mở ứng dụng máy ảnh và chế nhạo kết quả hoặc chỉ chế nhạo các cuộc gọi thường xuyên startActivity().

+0

Đây cũng là một ý tưởng hay, cảm ơn bạn đã chia sẻ nó. – brwngrldev

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