شرایط مختلفی وجود دارد که شما تمایل دارید تا Robolectric Test Runner را سفارشیسازی(Customize) نمایید تا بدین ترتیب قبل از اینکه همه تستها و یا حتی قبل از اینکه هر Test Method اجرا شود، برخی عملیاتها را انجام دهید.
یک مثال خوب برای این موضوع مقداردهی اولیه(Initialize) برای Dependency Injection Framework با مجموعهای از Dependencyهای مختلف برای تست شماست. خوشبختانه Robolectric یک راه برای Hook شدن در چرخه عمر تست دارد. اگر شما یک Application class در AndroidManifest.xml خود تعریف کنید، Robolectric به طور خودکار ابتدا سعی میکند یک نسخه آزمایشی از Application class شما را بارگذاری نماید. مثلا:
بگذارید بگوییم شما یک FooApplication را در مانیفست خود تعریف کردهاید:
<application android:name=".FooApplication">
اگر از RoboGuice استفاده میکنید، شما Injector را در Application class خود مقداردهی اولیه(Initialize) میکنید:
public class FooApplication extends Application { @Override public void onCreate() { super.onCreate(); ApplicationModule module = new ApplicationModule(); setBaseApplicationInjector(this, DEFAULT_STAGE, newDefaultRoboModule(this), module); } }
شما میتوانید نسخه آزمایشی اپلیکیشن را با نام TestFooApplication تعریف کنید:
public class TestFooApplication extends FooApplication implements TestLifecycleApplication { @Override public void onCreate() { super.onCreate(); TestApplicationModule module = new TestApplicationModule(); setBaseApplicationInjector(this, DEFAULT_STAGE, newDefaultRoboModule(this), module); } @Override public void beforeTest(Method method) { } @Override public void prepareTest(Object test) { getInjector(this).injectMembers(test); } @Override public void afterTest(Method method) { } }
Robolectric نسخه آزمایشی برنامه را بارگذاری میکند، که شما میتوانید از آن برای بارگذاری یک مجموعه از Bindingها در طول تست استفاده نمایید.
تمام قسمتهای آموزش Robolectric، به صورت دستهبندی شده از اینجا نیز در دسترس است.