اگر درحال پیادهسازی ارائهدهنده محتوا برای ذخیره و بازیابی داده یا قابلدسترس کردن داده برای برنامههای دیگر هستید، باید ارائهدهندهتان را آزمایش کنید تا مطمئن شوید رفتار غیرمنتظرهای ندارد. این درس نحوه آزمایش کردن ارائهدهندگان محتوای عمومی را شرح میدهد و برای ارائهدهندگانی که برای برنامه خودتان خصوصی نگه میدارید نیز قابلاجرا است.
ایجاد آزمایشهای یکپارچهسازی برای ارائهدهندگان محتوا
ارائهدهندگان محتوا به شما امکان میدهند به دادههای واقعی کاربر دسترسی داشته باشید، بنابراین مهم است که مطمئن شوید ارائهدهنده محتوا را در محیط آزمایشی ایزوله آزمایش میکنید. این رویکرد به شما امکان میدهد فقط دربرابر وابستگیهای دادهای که بهطور صریح در چارچوب تست تنظیم شدهاند اجرا کنید. همچنین به این معنی است که آزمایشهای شما دادههای واقعی کاربر را تغییر نمیدهد. برای مثال، باید از نوشتن آزمایشی که بهدلیل باقی ماندن دادهها از آزمایش قبلی ناموفق میشود خودداری کنید. بهطور مشابه، آزمایش شما باید از افزودن یا حذف کردن اطلاعات تماس واقعی در ارائهدهنده اجتناب کند.
برای آزمایش کردن ارائهدهنده محتوا بهصورت مجزا، از کلاس ProviderTestCase2
استفاده کنید. این کلاس به شما امکان میدهد از کلاسهای شیء ساختگی Android مانند
IsolatedContext و MockContentResolver برای دسترسی به فایل و
اطلاعات پایگاه داده بدون تأثیر بر دادههای واقعی کاربر استفاده کنید.
آزمون یکپارچهسازی شما باید بهعنوان کلاس آزمون JUnit 4 نوشته شود. برای کسب اطلاعات بیشتر درباره ایجاد کلاسهای آزمایشی JUnit 4 و استفاده از ادعاهای JUnit 4، به ایجاد کلاس آزمایشی واحد محلی مراجعه کنید.
برای ایجاد آزمایش ادغام برای ارائهدهنده محتوایتان، باید این مراحل را انجام دهید:
- کلاس آزمایشیتان را بهعنوان زیرکلاس
ProviderTestCase2ایجاد کنید. - کلاس
AndroidJUnitRunnerرا که AndroidX Test ارائه میدهد بهعنوان اجراکننده آزمون پیشفرض خود مشخص کنید. - شیء
Contextرا از کلاسApplicationProviderتنظیم کنید. برای نمونه، قطعه کد زیر را ببینید.
کاتلین
@Throws(Exception::class) override fun setUp() { super.setUp() context = ApplicationProvider.getApplicationContext<Context>() }
جاوا
@Override protected void setUp() throws Exception { super.setUp(); setContext(ApplicationProvider.getApplicationContext()); }
نحوه عملکرد ProviderTestCase2
ارائهدهندهای را با زیرکلاس ProviderTestCase2 آزمایش میکنید. این کلاس پایه
AndroidTestCase را گسترش میدهد، بنابراین چارچوب آزمایشی JUnit و همچنین روشهای خاص Android را برای آزمایش اجازههای برنامه ارائه میدهد. مهمترین ویژگی این کلاس، مقداردهی اولیه آن است که محیط آزمایشی ایزولهشده را ایجاد میکند.
راهاندازی
مقداردهی اولیه در سازنده برای ProviderTestCase2 انجام میشود،
که زیرکلاسها در سازندههای خودشان فراخوانی میکنند. سازنده ProviderTestCase2
یک شیء IsolatedContext ایجاد میکند که امکان عملیات پایگاه داده و فایل را فراهم میکند اما سایر تعاملات با سیستم Android را بهصورت ساختگی انجام میدهد.
عملیات فایل و پایگاه داده در دایرکتوریای انجام میشود که
در دستگاه یا شبیهساز محلی است و پیشوند خاصی دارد.
سپس سازنده یک MockContentResolver ایجاد میکند تا بهعنوان حلکننده برای آزمایش استفاده شود.
درنهایت، سازنده نمونهای از ارائهدهنده تحت آزمایش ایجاد میکند. این یک شیء ContentProvider معمولی است، اما همه اطلاعات محیطی خود را از IsolatedContext میگیرد، بنابراین فقط میتواند در محیط آزمایشی جداشده کار کند. همه آزمایشهای انجامشده در کلاس چارچوب تست دربرابر این شیء مجزاشده اجرا میشوند.
آزمایشهای ادغام را برای ارائهدهندگان محتوا به همان روش آزمایشهای واحد ابزاردار اجرا میکنید.
آنچه باید آزمایش شود
در اینجا چند رهنمود خاص برای آزمایش ارائهدهندگان محتوا آورده شده است.
- آزمایش با روشهای حلکننده: اگرچه میتوانید یک شیء ارائهدهنده را در
ProviderTestCase2نمونهسازی کنید، اما همیشه باید با یک شیء حلکننده بااستفاده از URI مناسب آزمایش کنید. با این کار مطمئن میشوید که ارائهدهنده را با انجام همان تعاملی که یک برنامه معمولی استفاده میکند آزمایش میکنید. - آزمایش کردن ارائهدهنده عمومی بهعنوان قرارداد: اگر قصد دارید ارائهدهندهتان عمومی و برای برنامههای دیگر دردسترس باشد، باید آن را بهعنوان قرارداد آزمایش کنید.
چند نمونه از نحوه انجام این کار در زیر آمده است:
- با ثابتهایی که ارائهدهندهتان بهطور عمومی افشا میکند آزمایش کنید. برای مثال، بهدنبال ثابتهایی بگردید که به نام ستونها در یکی از جدولهای داده ارائهدهنده اشاره میکنند. اینها باید همیشه ثابتهایی باشند که بهصورت عمومی توسط ارائهدهنده تعریف شدهاند.
- همه URIهایی را که ارائهدهندهتان ارائه میدهد آزمایش کنید. ارائهدهنده شما ممکن است چند «شناسه منبع یکسان» ارائه دهد که هرکدام به جنبه متفاوتی از دادهها اشاره دارد.
- آزمایش کردن URIهای نامعتبر. آزمایشهای واحد شما باید بهطور عمدی ارائهدهنده را با
یک URI نامعتبر فراخوانی کند و بهدنبال خطاها بگردد. یک طراحی ارائهدهنده خوب این است که برای URIهای نامعتبر،
IllegalArgumentExceptionرا برگرداند.
- آزمایش تعاملهای ارائهدهنده استاندارد: اکثر ارائهدهندگان شش روش دسترسی ارائه میدهند:
query()،insert()،delete()،update()،getType()، وonCreate(). آزمایشهای شما باید تأیید کند که همه این روشها کار میکنند. - آزمایش منطق کسبوکار: اگر ارائهدهنده محتوا منطق کسبوکار را پیادهسازی میکند، باید آن را آزمایش کنید. منطق کسبوکار شامل رسیدگی به مقادیر نامعتبر، محاسبات مالی یا ریاضی، حذف، یا ترکیب موارد تکراری است.