قوانین JUnit4 با AndroidX Test

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

ActivityScenarioRule

این قانون آزمایش کارکردی یک فعالیت را ارائه می‌دهد. این قانون فعالیت انتخاب‌شده را قبل‌از هر آزمایشی که با @Test گزارمان شده است و همچنین قبل‌از هر روشی که با @Before گزارمان شده است راه‌اندازی می‌کند. این قانون فعالیت را پس‌از تکمیل آزمایش و پایان یافتن همه روش‌های حاشیه‌نویسی‌شده با @After خاتمه می‌دهد. برای دسترسی به فعالیت داده‌شده در منطق آزمایشتان، یک فراخوانی برگشتی قابل‌اجرا برای 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 در آزمایش‌های Android، به منابع زیر مراجعه کنید.

اسناد

نمونه‌ها

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