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ử dụng với AndroidJUnitRunner. Các quy tắc JUnit giúp linh hoạt hơn và giảm bớt cần có mã nguyên mẫu trong kiểm thử. Ví dụ: bạn có thể dùng chúng để bắt đầu một hoạt động cụ thể.

Hoạt động Kịch bản Quy tắc

Quy tắc này cung cấp kiểm thử chức năng của một hoạt động. Quy tắc 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 chấm dứt hoạt động sau hoàn thành kiểm thử và tất cả các phương thức được chú giải bằng @After đều kết thúc. Để truy cập vào hoạt động trong logic kiểm thử của bạn, 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() { ... }
}

Quy tắc kiểm tra dịch vụ

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

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 các quy tắc JUnit trong các kiểm thử Android, hãy tham khảo các tài nguyên sau đây.

Tài liệu

Mẫu

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