قواعد 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، يُرجى الرجوع إلى الموارد التالية.

المستندات

نماذج

  • BasicSample: هي استخدام بسيط لـ ActivityScenarioRule.