اختبار الخدمة

في حال تنفيذ Service محلية كجزء من تطبيقك، عليك: إنشاء اختبارات أداة للتحقق من صحة سلوكها.

يوفّر AndroidX Test واجهة برمجة تطبيقات لاختبار عناصر Service في والعزلة. الفئة ServiceTestRule هي قاعدة في وحدة JUnit 4 تبدأ قبل تشغيل طرق اختبار الوحدة، ويغلق الخدمة بعد اكتملت الاختبارات. لمزيد من المعلومات عن قواعد JUnit 4، يُرجى الاطّلاع على وحدة JUnit ذات الصلة.

إعداد بيئة الاختبار

وقبل إنشاء اختبار دمج للخدمة، تأكَّد من ضبط مشروعك لاختبارات الأجهزة، كما هو موضح في إعداد المشروع اختبار AndroidX

إنشاء اختبار دمج للخدمات

يجب كتابة اختبار الدمج كفصل اختبار من JUnit 4. معرفة المزيد حول إنشاء فئات اختبار JUnit 4 واستخدام طرق تأكيد JUnit 4، راجع إنشاء صف لاختبار قياس حالة التطبيق

يمكنك إنشاء مثيل "ServiceTestRule" في الاختبار باستخدام السمة @Rule. التعليق التوضيحي.

Kotlin


@get:Rule
val serviceRule = ServiceTestRule()

Java


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

يوضح المثال التالي كيفية تنفيذ اختبار دمج خدمة ما. تتحقّق طريقة الاختبار testWithBoundService() من أنّ التطبيق يربطه. بنجاح مع خدمة محلية وأن واجهة الخدمة تعمل بشكل صحيح.

Kotlin


@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)))
}

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);
}

مصادر إضافية

لمعرفة المزيد حول هذا الموضوع، يُرجى الرجوع إلى المراجع الإضافية التالية.

نماذج