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، به منابع زیر مراجعه کنید.
اسناد
- راهنمای آزمایش قطعهها برای آزمایش قطعهها بهصورت مجزا.
- آزمایش کردن چیدمان Compose، برای آزمایش کردن میاناهای کاربر ساختهشده با Compose.
نمونهها
- BasicSample: استفاده ساده از
ActivityScenarioRule.