اجرای تستها در شبیهساز آندروید یا دستگاه کند است؟ ساخت(Building)، استقرار(Deploying) و راهاندازی(Lunching) برنامه اغلب یک دقیقه یا بیشتر طول میکشد؟ در اینجا هیچ راهی برای انجام TDD وجود ندارد؟اما باید راهکار بهتری هم وجود داشته باشد.
Robolectric یک Framework است که تستهای سریع و قابل اطمینان را برای Android به ارمغان میآورد. تستها در چند ثانیه داخل JVM روی ایستگاه کاری(Workstation) شما اجرا میشوند. با Robolectric شما میتوانید تستهایی مانند آنچه در ذیل آمده است را بنویسید:
@RunWith(RobolectricTestRunner.class) public class MyActivityTest { @Test public void clickingButton_shouldChangeMessage() { MyActivity activity = Robolectric.setupActivity(MyActivity.class); activity.button.performClick(); assertThat(activity.message.getText()).isEqualTo("Robolectric Rocks!"); } }
Test APIها و Isolation
برخلاف تستهای اندرویدی مبتنی بر شبیهساز سنتی، تستهای Robolectric در داخل یک Sandbox اجرا میشوند که این اجازه را میدهد: ۱- محیط اندرویدی دقیقا با شرایط مورد نظر برای هر تست پیکربندی شود، ۲- هر تست از همسایگانش جدا نگه داشته شود، ۳- Android Framework را با APIهای تستی که کنترل دقیه را فراتر از رفتار Android Framework و رویتپذیری هر State را برای Assertionها ارائه میکند، بسط دهید.
در حالی که بسیاری از Android Frameworkها همانطور که در داخل Robolectic Test انتظار میرود کار میکنند، اما برخی از رفتارهای معمولی کامپوننتهای اندرویدی به خوبی به Unit Testها ترجمه نمیشوند، از جمله: سنسورهای سختافزاری که باید شبیهسازی شوند و یا سرویسهای سیستمی که باید با دادههای تستی ثابت بارگذاری شوند. در این موارد، Robolectric یک تست دوگانه(Test Double) را فراهم میکند که برای اکثر سناریوهای Unit Test مناسب است.
شما میتوانید داکیومنتهای APIهای تستی Robolectric را با نصب Robolectric plugin for Chrome و بازدید از Android API Reference، پیدا کنید.
تستهای خارج از Emulator را اجرا کنید
Robolectric به شما امکان میدهد تستهایتان را روی ایستگاه کاری خود و یا محیط Continuous Integrationتان در یک JVM معمولی، بدون Emulator(مقلد) اجرا کنید. به همین دلیل، مراحل شبیهسازی(Dexing)، بستهبندی(Packaging) و نصب بر روی Emulator ضروری نیستند، که این خود باعث کاهش سیکلهای تست از چند دقیقه به چند ثانیه میشود، و به این ترتیب شما میتوانید به سرعت Iterate کرده و کد خود را با اعتماد به نفس Refactor کنید.
SDK، منابع(Resource)، و شبیهسازی Native Method
Robolectric تورم دیدگاهها(Inflation Of Views)، بارگیری منابع، و بسیاری از چیزهای دیگر که در کد Native C روی دستگاههای آندروید اجرا میشود را اداره مینماید. این ابزار به تستها اجازه میدهد تا بیشترین کاری که میتوانید بر روی یک دستگاه واقعی انجام دهید را به مرحله اجرا در آورید. ارائه پیادهسازی خودتان برای SDK Methodهای ویژه نیز آسان است، بنابراین به طور مثال شما میتوانید شرایط خطا یا رفتار سنسور در دنیای واقعی را شبیهسازی نمایید.
هیچ Mocking Frameworkای لازم نیست
یک رویکرد جایگزین برای Robolectric این است که از Mock Frameworkهایی مانند Mockito استفاده کنید یا Android SDK را Mock Out کنید. در حالی که این یک رویکرد معتبر است، اغلب تستهایی را انجام میدهد که اساسا پیادهسازی معکوس کد اپلیکیشن هستند.
سبک تست ارائه شده توسط Robolectric نزدیک به تست Black Box است. این ابزار تستها را برای Refactor موثرتر کرده و به تستها اجازه میدهد به جای اجرای اندروید، بر رفتار اپلیکیشن متمرکز شوند. شما اگر دوست دارید هنوز هم میتوانید از Mocking Framework به همراه Robolectric استفاده نمایید.
تمام قسمتهای آموزش Robolectric، به صورت دستهبندی شده از اینجا نیز در دسترس است.
ممنون از شما
امیدوارم که این آموزش ادامه داشته باشه هر چه زودتر قسمت های بعدی بیاد من بسیار مشتاق و نیازمندم
بسیار بسیار سپاسگزارم
با سلام.
دوستان و همکاران عزیز به مجموعه تیستن لطف دارند.
طبق صحبتهایی که با مهندس دیزجی انجام شد، مقرر شده پستهای مربوط به این دوره حداکثر تا یک ماه آینده تکمیل بشه ان شا ا…