قواعد JUnit4 من خلال اختبار AndroidX

يتضمّن اختبار AndroidX مجموعة من قواعد JUnit لاستخدامها مع AndroidJUnitRunner. وتوفر قواعد JUnit مرونة أكبر تقلل من التعليمات البرمجية النموذجية المطلوبة في الاختبارات. على سبيل المثال، يمكن استخدامها لبدء نشاط محدد.

قاعدة سيناريو النشاط

توفّر هذه القاعدة اختبارًا وظيفيًا لنشاط واحد. تُطلق القاعدة النشاط الذي تم اختياره قبل كل اختبار تمت إضافة تعليق توضيحي إليه باستخدام @Test، وكذلك قبل أي طريقة تمت إضافة تعليقات توضيحية إليها باستخدام @Before. تُنهي القاعدة النشاط بعد اكتمال الاختبار ويتم تعليق جميع الطرق التي تمت إضافة تعليقات توضيحية لها بانتهاء @After. للوصول إلى النشاط المحدّد في منطق الاختبار، قدِّم استدعاءً قابلاً للتنفيذ لـ ActivityScenarioRule.getScenario().onActivity().

يوضح مقتطف الرمز التالي كيفية دمج ActivityScenarioRule في منطق الاختبار:

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() { ... }
}

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

توفّر هذه القاعدة آلية مبسّطة لتشغيل الخدمة قبل الاختبارات وإيقافها قبل إجراء الاختبارات وبعدها. يمكنك بدء الخدمة أو ربطها بإحدى الطرق المساعدة. يتوقف أو يلغي الربط تلقائيًا بعد اكتمال الاختبار وانتهاء أي طرق تمت إضافة تعليقات توضيحية لها باستخدام @After.

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

مراجع إضافية

لمزيد من المعلومات حول استخدام قواعد JUnit في اختبارات Android، يُرجى الرجوع إلى الموارد التالية.

المستندات

عيّنات

  • Basicعيّن: استخدام بسيط لـ ActivityScenarioRule.