سرویس خود را تست کنید

اگر یک Service محلی را به‌عنوان جزئی از برنامه خود پیاده‌سازی می‌کنید، می‌توانید آزمایش‌های ابزاری برای تأیید درستی رفتار آن ایجاد کنید.

AndroidX Test یک API برای آزمایش اشیاء Service شما به صورت مجزا ارائه می دهد. کلاس ServiceTestRule یک قانون JUnit 4 است که سرویس شما را قبل از اجرای روش های تست واحد شما شروع می کند و پس از اتمام تست ها سرویس را خاموش می کند. برای کسب اطلاعات بیشتر در مورد قوانین JUnit 4، به مستندات JUnit مراجعه کنید.

محیط تست خود را تنظیم کنید

قبل از ساختن تست ادغام خود برای سرویس، مطمئن شوید که پروژه خود را برای تست های ابزاردار پیکربندی کرده اید، همانطور که در پروژه راه اندازی برای تست AndroidX توضیح داده شده است.

یک تست یکپارچه سازی برای خدمات ایجاد کنید

آزمون ادغام شما باید به عنوان یک کلاس تست JUnit 4 نوشته شود. برای کسب اطلاعات بیشتر در مورد ایجاد کلاس‌های آزمایشی JUnit 4 و استفاده از روش‌های ادعایی JUnit 4، به ایجاد کلاس تست ابزاردار مراجعه کنید.

با استفاده از حاشیه نویسی @Rule یک نمونه ServiceTestRule در آزمایش خود ایجاد کنید.

کاتلین

@get:Rule
val serviceRule = ServiceTestRule()

جاوا

@Rule
public final ServiceTestRule serviceRule = new ServiceTestRule();

مثال زیر نشان می دهد که چگونه می توانید یک تست یکپارچه سازی را برای یک سرویس پیاده سازی کنید. روش تست testWithBoundService() تأیید می کند که برنامه با موفقیت به یک سرویس محلی متصل می شود و رابط سرویس به درستی رفتار می کند.

کاتلین

@Test
@Throws(TimeoutException::class)
fun testWithBoundService() {
  // Create the service Intent.
  val serviceIntent = Intent(
      ApplicationProvider.getApplicationContext<Context>(),
      LocalService::class.java
  ).apply {
    // Data can be passed to the service via the Intent.
    putExtra(SEED_KEY, 42L)
  }

  // Bind the service and grab a reference to the binder.
  val binder: IBinder = serviceRule.bindService(serviceIntent)

  // Get the reference to the service, or you can call
  // public methods on the binder directly.
  val service: LocalService = (binder as LocalService.LocalBinder).getService()

  // Verify that the service is working correctly.
  assertThat(service.getRandomInt(), `is`(any(Int::class.java)))
}

جاوا

@Test
public void testWithBoundService() throws TimeoutException {
  // Create the service Intent.
  Intent serviceIntent =
      new Intent(ApplicationProvider.getApplicationContext(),
        LocalService.class);

  // Data can be passed to the service via the Intent.
  serviceIntent.putExtra(LocalService.SEED_KEY, 42L);

  // Bind the service and grab a reference to the binder.
  IBinder binder = serviceRule.bindService(serviceIntent);

  // Get the reference to the service, or you can call
  // public methods on the binder directly.
  LocalService service =
      ((LocalService.LocalBinder) binder).getService();

  // Verify that the service is working correctly.
  assertThat(service.getRandomInt()).isAssignableTo(Integer.class);
}

منابع اضافی

برای کسب اطلاعات بیشتر در مورد این موضوع، به منابع اضافی زیر مراجعه کنید.

نمونه ها