آموزش توسعۀ آزمون محور (TDD) در اندروید – قسمت پنجم (آخر)

نویسنده : سید ایوب کوکبی ۹ فروردین ۱۳۹۸

آموزش توسعۀ آزمون محور (TDD) در اندروید – قسمت پنجم (آخر)

در آخرین قسمت از آموزش توسعۀ آزمون محور (TDD) قصد داریم شما را با Espresso آشنا کنیم. فریم‌ورکی که شهرت فراوانی در نوشتن تست‌های واسط کاربری اندروید دارد. قسمت اول این مجموعه را اختصاص دادیم به دلایل ترس برنامه‌نویسان از ریفکتور، مفهوم کلی TDD، مراحل اجرای آن و دلایل اهمیت این روش. در قسمت دوم و سوم و چهارم نیز با قدرت TDD، انواع تست، روش نوشتن تست و چگونگی اجرای آن‌ها، Mocking و تست یکپارچگی آشنا شدید.

Espresso چیست؟

Espresso (اسپرسو) فریم‌ورکی برای تست واسط کاربری (UI Testing Framework) است که از سوی گوگل عرضه شده است. این فریم‌ورک تعدادی API برای تست واسط گرافیکی یک اپلیکیشن در اختیار شما قرار می‌دهد. این تست اطمینان می‌دهد که کاربر در تعامل با برنامه با رفتار پیش‌بینی نشده‌ای مواجه نخواهد شد و همه چیز آنطور که انتظار دارید اتفاق می‌افتد. مثلاً وقتی کادر یوزرنیم و پسورد خالی بود حتماً پیغام خطا به کاربر نشان داده شود. یا اگر یوزر و پسورد درست بود و دکمۀ لاگین زده شد، حتماً پیغام موفقیت‌آمیز بودن ورود نمایش داده شود.

اسپرسو اساساً سه جزء اصلی دارند:

  1. ViewMatcher: برای پیدا کردن یک ویوی خاص در صفحه که داخل متد onView به کار می‌رود؛
  2. ViewAction: رفتار کاربر با عناصر گرافیکی برنامه را اجرا می‌کند با استفاده از ViewInteraction.perform
  3. ViewAssertion: برای اثبات وضعیت ویو از ViewInteraction.check استفاده می‌کند.
onView(withId(R.id.my_view))// withId(R.id.my_view) is a ViewMatcher
    .perform(click())       // click() is a ViewAction
    .check(matches(isDisplayed())); // matches(isDisplayed()) is a ViewAssertion

توضیحات انگلیسی گویا است ولی فارسی هم توضیح می‌دهیم:

(withID(R.id.myView یک ViewMatcher است که داخل متد onView قرار داده‌ایم تا به ویوی مورد نظر دسترسی پیدا کنیم.

بخوانید  معنی استاتیک بودن زبان جاوا چیست؟

()click یک viewAction است که درون متد perform به کار رفته تا عمل کلیک کاربر را بر روی ویویی که یافته‌ایم اجرا کند.

(()matches(isDisplayed یک viewAssertion است که وضعیت خاصی را بررسی می‌کند.

چیت‌شیت Espresso را می‌توانید در سایت رسمی گوگل مشاهده کنید.

روی LoginActivity کلیدهای Shift+Ctrl+T را بزنید و یک کلاس تست برای UI Test داخل فولدر androidTest بسازید.

بعد از ایجاد شدن (RunWith(AndroidJUnit4.class@ قبل از عنوان کلاس

تست ()checkUserNameEditTextIsDisplayed را می‌نویسیم. گذاشتن Test@ قبل از متد تست الزامی است. همچنین به ActivityTestRule نیاز داریم.

از اسم متد می‌توان فهمید که این تست برای اطمینان از نمایش تکست‌باکس username در صفحه لاگین نوشته شده است. متدهای اسپرسو ذاتاً خودتوصیف هستند. یعنی به راحتی می‌توان مفهوم آن را از روی نام‌گذاری متدها حدس زد.

برای اجرای این تست حتماً باید دستگاه اندرویدی خود را به سیستم متصل کنید یا تست را در ایمیلیتور اجرا نمایید. اگر اشکالی در کدهای شما وجود نداشته باشد. تست سبز می‌شود. حالا عمداً صفت visibility تکست‌باکس فوق را gone کنید تا در صفحه مخفی شود. اکنون دوباره تست را اجرا کنید. این بار قرمز می‌شود.

تست دیگری بنویسیم: در صورت خالی گذاشتن فیلدها و کلیک روی دکمۀ لاگین پیغام خطا نمایش داده می‌شود یا خیر.

ابتدا دکمۀ لاگین را پیدا می‌کنیم. بررسی می‌کنیم که نمایش داده می‌شود یا نه. سپس عمل کلیک را اجرا می‌کنیم. از آنجایی که چیزی در فیلد یوزر و پسورد وارد نشده انتظار داریم پیغام خطا به کاربر نمایش داده شود. در خط آخر این پیغام خطا را جستجو می‌کنیم که آیا نمایش داده می‌شود یا خیر. اگر تست را اجرا کنید سبز خواهد شد. برای اطمینان از عملکرد تست می‌توانید شرط نمایش پیام خطا را در کدهای اصلی بردارید و تست را دوباره اجرا کنید. البته وقتی به کارکرد فریم‌ورک اطمینان دارید نیازی نیست برای هر تست حالت دیگر آن را هم بررسی کنید.

بخوانید  اشتباهات رایج در طراحی واسط کاربری برنامه‌های اندرویدی

حالا موفقیت‌آمیز بودن لاگین را تست می‌کنیم

مثالی از یک تست Espresso

ابتدا با وارد کردن یک یوزرنیم و پسورد صحیح و زدن دکمۀ لاگین زمینه را برای نمایش پیغام ورود موفقیت آمیز فراهم کنید. سپس با جستجوی پیام مذکور اطمینان حاصل کنید که عملیات طبق انتظار بوده است.

خب به پایان آمد این دفتر، حکایت همچنان باقی است…

شما اکنون با الفبای تست در محیط اندروید آشنا شده‌اید. هر یک از این فریم‌ورک‌ها عالمی برای خودشان دارند. هنوز چیزهای زیادی هست که باید یاد بگیرید. سعی کنید با تعریف پروژه‌های جدید و بررسی کدهای دیگران در این کار تبحر پیدا کنید. نوشتن تست اگرچه فرایند کدنویسی را طولانی و گهگاهی تلخ می‌کند ولی در درازمدت برای افزایش کیفیت محصول و اشکال‌زدایی راحت‌تر برنامه کاربرد فراوانی دارد.

سید ایوب کوکبی

نویسنده و مترجم...

0 دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *