قوانین JUnit4 با AndroidX Test

AndroidX Test شامل مجموعه ای از قوانین JUnit است که با AndroidJUnitRunner استفاده می شود. قوانین JUnit انعطاف پذیری بیشتری را فراهم می کند و کد دیگ بخار مورد نیاز در تست ها را کاهش می دهد. برای مثال می توان از آنها برای شروع یک فعالیت خاص استفاده کرد.

ActivityScenarioRule

این قانون آزمایش عملکردی یک فعالیت را ارائه می دهد. این قانون فعالیت انتخاب شده را قبل از هر تست مشروح شده با @Test و همچنین قبل از هر روشی که با @Before مشروح شده است راه اندازی می کند. این قانون پس از اتمام تست و مشروح تمام روش‌ها با @After finish فعالیت را خاتمه می‌دهد. برای دسترسی به فعالیت داده شده در منطق آزمایشی خود، یک callback قابل اجرا برای ActivityScenarioRule.getScenario().onActivity() ارائه دهید.

قطعه کد زیر نحوه ادغام ActivityScenarioRule در منطق تست خود نشان می دهد:

کاتلین


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

جاوا


public class MyClassTest {
    @Rule
    public ActivityScenarioRule<MyClass> activityRule =
            new ActivityScenarioRule(MyClass.class);

    @Test
    public void myClassMethod_ReturnsTrue() { ... }
}

ServiceTestRule

این قانون یک مکانیسم ساده برای راه اندازی سرویس شما قبل از آزمایش و خاموش کردن آن قبل و بعد از آن فراهم می کند. می توانید سرویس را با یکی از روش های کمکی راه اندازی یا متصل کنید. پس از اتمام آزمایش و پایان یافتن هر روشی که با @After به پایان رسید، به طور خودکار متوقف یا باز می شود.

کاتلین


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

جاوا


@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 در تست های اندروید، به منابع زیر مراجعه کنید.

مستندات

نمونه ها

  • BasicSample : استفاده ساده از ActivityScenarioRule .