Android Studio + Gradle – AGP < 3.0
در نسخههای قبلی شما باید فیلد ‘constants’ که به ‘BuildConfig.class’ تولید شده توسط Gradle اشاره میکند را مشخص کنید. Robolectric از constants در کلاس برای محاسبه مسیرهای خروجی مورد استفاده Gradle هنگام ساختن پروژه، بهره میگیرید. بدون این مقادیر، Robolectric قادر نخواهد بود Manifest، Resourceها و Assetهای Merg شده را پیدا کند. این کار در آینده متوقف خواهد شد، بنابراین ما به شدت مهاجرت به API جدید را توصیه میکنیم.
testCompile "org.robolectric:robolectric:4.0.2"
تست خود را با Robolectric Test Runner حاشیهنویسی(Annotate) کرده و Robolectric را برای یافتن Resourceهای خود پیکربندی نمایید
@RunWith(RobolectricTestRunner.class) @Config(constants = BuildConfig.class) public class SandwichTest { }
Building با Android Studio
Robolectric با Android Studio 1.1.0 یا نسخه جدیدتر آن کار میکند. دستورالعمل فوق را به سادگی برای کار با Gradle دنبال کنید. برای نسخههای Android Studio قدیمی تر از ۲٫۰٫۰، پشتیبانی از تستِ یونیت(Unit Test Support) را در برگه “Build Variants” فعال کنید و تست خود را اجرا نمایید. از Android Studio 2.0.0، امکان Test Artifactها به طور پیشفرض فعال شده است. برای تنظیم کردن Test Artifactها به حالت فعال/غیرفعال میتوانید در منوها به این مسیر مراجعه نمایید: File -> Settings -> Build, Execution, Deployment -> Build Tools -> Gradle -> Experimental
به روزرسانی پیکربندیهای اجرای JUnit
علاوه بر این به منظور کار حول باگی که Android Studio، برای ماژول در حال تست، Working Directory را تنظیم نکرده است، احتمالا نیاز دارید پیکربندی پیشفرض Junit Test Runner را تغییر داده و مجددا پیکربندی نمایید. این کار را میتوانید با ویرایش پیکربندیهای اجرا، ‘Defaults -> Android JUnit’ و تغییر مقدار Working Directory به ‘$ MODULE_DIR $’ انجام دهید.
توجه داشته باشید که اگر شما از قبل پیکربندی JUnit را دارید (‘Android JUnit’ در ریشه درخت)، باید همان تغییراتی را که قبلا در بالا ذکر شد برای همه آنها انجام دهید.
Maven و Eclips
قطعه زیر را به pom.xml بیفزایید:
<dependency> <groupId>org.robolectric</groupId> <artifactId>robolectric</artifactId> <version>4.0.2</version> <scope>test</scope> </dependency>
تست خود را با base test runner حاشیهنویسی(Annotate) نمایید:
@RunWith(RobolectricTestRunner.class) public class SandwichTest { }
استفاده از Libraryها با Maven
اگر شما برای build برنامه از Maven استفاده میکنید، باید Robolectric را در جایی که منابع باز نشده(Unpacked Resource) قرار گرفتهاند برای هر Library که استفاده میکنید، تعریف نمایید. این را میتوان هم در حاشیهنویسی ‘@Config’ مشخص کنید:
@RunWith(RobolectricTestRunner.class) @Config(libraries = { "build/unpacked-libraries/library1", "build/unpacked-libraries/library2" }) public class SandwichTest { }
و هم در فایل ‘robolectric.properties’
libraries=build/unpacked-libraries/library1,build/unpacked-libraries/library2
تمام مسیرها مربوط به Root Directory پروژه است.
مسائل مربوط به بارگذاری Debugging Resource
اگر مطمئن نیستید که آیا منابع برای یک Library خاص بارگذاری میشوند یا خیر، debug logging را با تنظیم مشخه سیستم به این صورت فعال نمایید: ‘robolectric.logging.enabled = true’ . سپس تست خود را انجام دهید. شما باید یک خروجی مشابه زیر داشته باشید:
Loading resources for ‘com.foo’ from build/unpacked-libraries/library1…
اگر یک Library خاص را در لیست مشاهده نکردید، مجددا پیکربندی را چک کنید.
اگر Reference Resourceهای شما خارج از پروژه شما هستند(به عنوان مثال در یک aar dependency) نیاز خواهید داشت Robolectric را با یک Pointer به aar که در Build System شما Explod شده است تجهیز نمایید. برای اطلاعات بیشتر در اینترنت به دنبال Using Library Resources در موضوع مطروحه بگردید.
Building با Eclips
پلاگین m2e-android را برای Eclipse نصب کنید و پروژه را به عنوان پروژه Maven ایمپورت نمایید. پس از ایمپورت شدن به Eclipse، شما باید consume-aar goal را به صورت فراموش شده(ignored) ثبت کنید، چرا که هنوز AAR Consumption هنوز توسط m2e-android پشتیبانی نمیشود. برای انجام این کار، به سادگی Quick fix را روی حطای “Plugin execution not covered by lifecycle configuration” اعمال نمایید. برای اجرای تستهای خود، فقط روی پروژه کلیک راست کرده و سپس Run as -> JUnit Test. پس از این کار Eclipse JUnit Launcher را انتخاب کنید.
تمام قسمتهای آموزش Robolectric، به صورت دستهبندی شده از اینجا نیز در دسترس است.