Hançer hizmetini TelephonyManager
Hançer ile enjekte etmeye çalışıyorum. Bunu takip ediyorum sample. Grafiği oluşturmak için Application
sınıfını genişlettim ve ServiceModule
'un yer aldığı bir ApplicationModule
'u tanımladım ve diğer modüller gelecekte dahil edilecek.Hançer ve Robolectric ile enjekte etme hizmeti
Düzenleme:
Şimdi sistem hizmeti sorunsuz bir Activity
üzerine enjekte edilir. Activity
'un içinde FinderApplication.inject(this)
eksikti. Bir enjeksiyonu vardır, ancak hala Robolectric
ile test altında enjekte etmez. Bu yazının altındaki test case ekledi:
Düzenleme-2: onCreate
yöntemine
((FinderApplication) getApplication()).getGraph().inject(this);
: ile BaseActivity
oluşturulan ApplicationModule
silinir ve.) (ServiceModule
Ama boş bir yapıcı tanımlarsanız enjekte sınıftır zaman boş bir işaretçi olsun. Java.lang.NoSuchMethodException:
Neden Olduğu: Ben alıyorum hatadır gerekli.
FinderApplication.java
public class FinderApplication extends Application { private ObjectGraph mObjectGraph; @Override public final void onCreate() { super.onCreate(); mObjectGraph = ObjectGraph.create(new ServiceModule(this)); } public final ObjectGraph getGraph() { return mObjectGraph; } }
ServiceModule.java
@Module(entryPoints = { SimCardActivity.class, SimService.class }) public class ServiceModule { private Context mContext; public ServiceModule(Context context) { mContext = context; } @Provides @Singleton TelephonyManager provideTelephonyManager(){ return (TelephonyManager) mContext .getSystemService(Context.TELEPHONY_SERVICE); } }
SimCardActivityTest.java
@RunWith(RobolectricTestRunner.class) public class SimCardActivityTest { @Before public void setUp() throws Exception { ObjectGraph.create(new TestModule()).inject(this);; } @Module( includes = ServiceModule.class, overrides = true, entryPoints = {SimCardActivityTest.class, SimCardActivity.class} ) static class TestModule{ public static TelephonyManager TELEPHONY_MANAGER = Mockito.mock(TelephonyManager.class); @Provides @Singleton TelephonyManager provideTelephonyManager(){ return TELEPHONY_MANAGER; } } }
Ben diğer modüller için üye sağlayacaktır @Module açıklama bayrağı içerir sanmıyorum. "içerir", her giriş noktasındaki tüm enjekte edilebilir üyelerin tatmin olduğundan emin olmak için başka bir modül kullanmak içindir, böylece modül tam bir nesne grafiği oluşturur. – SeanPONeil
Bu, bayrakların belirtilen modülleri içermesi gibi görünüyor. Çünkü uygulama normal olarak çalışırken enjekte ediyor. – Axxiss
Test örneğini etkinlik yerine nesne grafiğine enjekte edersiniz, belki? – SeanPONeil