के साथ सेवा इंजेक्ट करें मैं डैगर के साथ सेवा TelephonyManager
सेवा इंजेक्ट करने की कोशिश कर रहा हूं। मैं इस sample का पालन कर रहा हूं। मैंने ग्राफ़ बनाने के लिए Application
कक्षा को बढ़ाया और ApplicationModule
परिभाषित किया जहां ServiceModule
शामिल है और अन्य मॉड्यूल भविष्य में शामिल किए जाएंगे।डैगर और रोबोलेक्ट्रिक
संपादित करें:
अब सिस्टम सेवा बिना किसी समस्या के एक Activity
पर इंजेक्ट किया जाता है। Activity
के अंदर FinderApplication.inject(this)
गुम था। इसमें इंजेक्शन है लेकिन अभी भी Robolectric
के साथ परीक्षण के तहत इंजेक्शन नहीं है। मैं इस पोस्ट के निचले भाग में परीक्षण का मामला कहा:
संपादित -2: onCreate
पद्धति पर
((FinderApplication) getApplication()).getGraph().inject(this);
: ApplicationModule
नष्ट कर दिया और साथ बनाया BaseActivity
। त्रुटि मैं हो रही है: java.lang.NoSuchMethodException:
की वजह से। ServiceModule()
लेकिन जब इंजेक्शन वर्ग है अगर मैं एक खाली निर्माता को परिभाषित मैं एक अशक्त सूचक मिलता है जरूरत है।
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;
}
}
}
मुझे नहीं लगता कि @Module एनोटेशन अन्य मॉड्यूल के लिए सदस्यों को प्रदान करेगा में झंडा भी शामिल है। "शामिल है" यह सुनिश्चित करने के लिए एक और मॉड्यूल का उपयोग करने के लिए है कि प्रत्येक प्रविष्टि बिंदु में सभी इंजेक्शन योग्य सदस्य संतुष्ट हैं, ताकि मॉड्यूल एक पूर्ण ऑब्जेक्ट ग्राफ़ बनाता है। – SeanPONeil
ऐसा लगता है जैसे ध्वज में वास्तव में निर्दिष्ट मॉड्यूल शामिल हैं। क्योंकि ऐप सामान्य रूप से चल रहा है जब इंजेक्शन है। – Axxiss
आप गतिविधि के बजाए ऑब्जेक्ट ग्राफ़ में टेस्ट केस इंजेक्शन कर रहे हैं, शायद? – SeanPONeil