Quy tắc JUnit4 với AndroidX Test

AndroidX Test bao gồm một tập hợp các quy tắc JUnit sẽ được sử dụng với AndroidJUnitRunner. Các quy tắc JUnit mang lại tính linh hoạt cao hơn và giảm mã nguyên mẫu cần có trong kiểm thử. Ví dụ: chúng có thể được dùng để bắt đầu một hoạt động cụ thể.

ActivityScenarioRule

Quy tắc này cung cấp việc kiểm thử chức năng cho một hoạt động đơn lẻ. Quy tắc này sẽ chạy hoạt động đã chọn trước mỗi lần kiểm thử được chú thích bằng @Test, cũng như trước bất kỳ phương thức nào được chú thích bằng @Before. Quy tắc này sẽ chấm dứt hoạt động sau khi quá trình kiểm thử hoàn tất và tất cả các phương thức được chú thích bằng @After kết thúc. Để truy cập hoạt động nhất định trong logic kiểm thử, hãy cung cấp một lệnh gọi lại có thể chạy cho ActivityScenarioRule.getScenario().onActivity().

Đoạn mã sau đây minh hoạ cách kết hợp ActivityScenarioRule vào logic kiểm thử:

Kotlin


@RunWith(AndroidJUnit4::class.java)
@LargeTest
class MyClassTest {
  @get:Rule
  val activityRule = ActivityScenarioRule(MyClass::class.java)

  @Test fun myClassMethod_ReturnsTrue() {
    activityRule.scenario.onActivity { … } // Optionally, access the activity.
   }
}

Java


public class MyClassTest {
    @Rule
    public ActivityScenarioRule<MyClass> activityRule =
            new ActivityScenarioRule(MyClass.class);

    @Test
    public void myClassMethod_ReturnsTrue() { ... }
}

ServiceTestRule

Quy tắc này mang đến một cơ chế đơn giản để chạy dịch vụ trước và sau khi kiểm thử và tắt dịch vụ. Bạn có thể bắt đầu hoặc liên kết dịch vụ bằng một trong các phương thức trợ giúp. Quá trình này tự động dừng hoặc huỷ liên kết sau khi quá trình kiểm thử hoàn tất và mọi phương thức được chú thích bằng @After đã kết thúc.

Kotlin


@RunWith(AndroidJUnit4::class.java)
@MediumTest
class MyServiceTest {
  @get:Rule
  val serviceRule = ServiceTestRule()

  @Test fun testWithStartedService() {
    serviceRule.startService(
      Intent(ApplicationProvider.getApplicationContext<Context>(),
      MyService::class.java))
    // Add your test code here.
  }

  @Test fun testWithBoundService() {
    val binder = serviceRule.bindService(
      Intent(ApplicationProvider.getApplicationContext(),
      MyService::class.java))
    val service = (binder as MyService.LocalBinder).service
    assertThat(service.doSomethingToReturnTrue()).isTrue()
  }
}

Java


@RunWith(AndroidJUnit4.class)
@MediumTest
public class MyServiceTest {
    @Rule
    public final ServiceTestRule serviceRule = new ServiceTestRule();

    @Test
    public void testWithStartedService() {
        serviceRule.startService(
                new Intent(ApplicationProvider.getApplicationContext(),
                MyService.class));
        // Add your test code here.
    }

    @Test
    public void testWithBoundService() {
        IBinder binder = serviceRule.bindService(
                new Intent(ApplicationProvider.getApplicationContext(),
                MyService.class));
        MyService service = ((MyService.LocalBinder) binder).getService();
        assertThat(service.doSomethingToReturnTrue()).isTrue();
    }
}

Tài nguyên khác

Để biết thêm thông tin về cách sử dụng quy tắc JUnit trong kiểm thử Android, hãy tham khảo các tài nguyên sau.

Tài liệu

Mẫu

  • BasicSample: Cách sử dụng đơn giản ActivityScenarioRule.