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

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

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

خب با بخش چهارم از مجموعۀ مقالات آموزش توسعۀ آزمون محور (TDD) در خدمت شما هستیم. در بخش قبلی با TDD و کاربرد عملی آن را آشنا شدیم. چند یونیت تست نوشتیم و اکنون می‌خواهیم در ادامۀ فرایند تست، سراغ Integration Test یا تست یکپارچگی برویم و شما را با ساخت اشیاء Mock یا ساختگی نیز آشنا کنیم.

بیایید اول یک UI برای پروژه‌مان درست کنیم. چیز ساده‌ای مثل اسکچ پایین:

برای دریافت کدهای UI این Commit را Checkout کنید:

git checkout c1988a44127c5e08196f459b50902a1a794d98ef

بین لایۀ View و Presenter قراردادی داریم تحت عنوان LoginView که در تصویر پایین می‌بینید. برای تعری قرارداد معمولاً از اینترفیس استفاده می‌کنیم.

خب، حالا در اکتیوتی این قرارداد را پیاده‌سازی می‌کنیم.

این هم پیاده‌سازی لایۀ presenter:

کدها واضح و قابل فهم به نظر می‌رسند؛ با این حال سوالی بود کامنت بگذارید.

اگر می‌خواهید کدها را تا اینجا دریافت کنید، این دستور را در git وارد کنید:

git checkout 6ef35a482c72c6266ccd10319728b44668a621ce

اما در LoginPresenterTest با خطایی مواجه می‌شوید. LoginPresenter ما یک سازنده از نوع LoginView دارد که اینجا وجود ندارد.

برای حل این مشکل باید شی LoginView را به آن پاس دهیم. خب ناچاریم یک نمونۀ ساختگی از این شی درست کنیم یا اصطلاحاً آن را mock کنیم. اینجاست که بحث mocking و لزوم استفاده از آن باز می‌شود.

Mocking چیست و کاربرد آن در تست واحد (TDD)

Mock در فارسی معادل واژۀ ساختگی یا تقلیدی است. یکی از مهم‌ترین اهداف تست، افزایش سرعت تست و خودکارسازی این فرایند است. گاهی متدی را که می‌خواهیم تست کنیم به آبجکت‌های دیگری وابسته است؛ مثلاً نیازمند پایگاه داده‌ای است که در حالت واقعی لود شدن داده‌های آن چندین دقیقه به طول می‌انجامد. ممکن است شبکه یا اینترنت مشکل داشته باشد و دریافت اطلاعات پایگاه داده با خطا مواجه شود و هزاران مشکل دیگر. وقتی در فرایند تست درگیر این وابستگی‌ها شویم؛ فلسفۀ تست زیر سوال می‌رود.

بخوانید  15 توصیه به توسعه‌دهندگان جوان اندروید

به همین خاطر Mocking معرفی شد. در این روش، رفتار آبجکتی که متد ما به آن وابسته است شبیه‌سازی می‌شود. در واقع برای اینکه کارمان راه بیفتد یک آبجکت ساختگی درست می‌کنیم که رفتاری مشابه آبجکت واقعی از خود نشان دهد. این کار فرایند تست را سرعت می‌بخشد و باعث می‌شود به جای درگیر شدن با وابستگی‌ها به صورت ایزوله روی قابلیت‌های برنامه و تست آن‌ها تمرکز کنیم. اشیاء Mock کاربرد فراوانی در آزمون واحد دارند و برای این کار فریم‌ورک‌های مختلفی معرفی شده‌اند که محبوب‌ترینشان در اندروید Mockito است.

برای استفاده از این فریم‌ورک، testCompile زیر را در build.gradle وارد کنید:

testCompile 'org.mockito:mockito-core:1.10.19'

حالا می‌توانیم LoginView را به سادگی mock کنیم

کاربرد Mock در تست TDD

خب حالا کدهای ما به این صورت خواهد بود

در صورتی که کدها را درست نوشته باشید بعد از اجرای تست، چراغ سبز می‌شود که یعنی همه چیز درست است.

تست یکپارچگی (بین دو لایۀ Presenter و View)

تعریف Integration Test یادتان هست؟ اینکه بعد از اطمینان از صحت کارکرد اجزاء مطمئن شویم آیا در کنار هم نیز به درستی کار می‌کنند. مثلاً در پروژۀ ما مهم است که دو لایۀ Presenter و View که بسیار در ارتباط با هم هستند، به درستی با هم تعامل داشته باشند. برای اطمینان از یکپارچگی و اتصال این دولایه از متد verify استفاده می‌کنیم که چک می‌کند متد مورد نظر فرخوانی می‌شود یا نه:

در تصویر بالا، متد verify چک می‌کند که متد showLoginSuccessMessage که در لایۀ View قرار دارد بعد از چک کردن یوزرنیم و پسورد که در لایۀ Presenter انجام می‌شود فراخوانی می‌شود یا نه.

بخوانید  کاتلین - جایگزین شایسته جاوا

مابقی تست‌ها را هم به شکل زیر وارد کنید:

کدهایی که تا الان نوشتیم را می‌توانید Checkout کنید

git checkout 97f0eff1d0eef26494dcec6872355458a6340cf7

در بخش بعدی TDD تست واسط کاربری را آموزش می‌دهیم.

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

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

مطالب مرتبط

0 دیدگاه

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