मैं एक Presenter
वर्ग है जो एक क्षेत्र डैगर के माध्यम से इंजेक्शन का उपयोग करता है, यह इस तरह दिखता है:इकाई में एक इंजेक्शन क्षेत्र मजाक परीक्षण
public class RssListPresenter {
@Inject
RssService rssService; // <-- injected field
public RssListPresenter() {
setupDI();
}
private void setupDI() {
DaggerNetworkComponent.builder()
.networkModule(new NetworkModule())
.build()
.inject(this);
}
public void loadItems() {
Rss rss = rssService.getRssFeed()
// ....
}
}
सब कुछ ठीक काम करता है। अब, मैं इकाई को RssListPresenter
कक्षा का परीक्षण करना चाहता हूं। प्रश्न यह है कि मैं प्रस्तुतकर्ता को नकली RssService
कैसे प्रदान करूं?
संभोग मैं प्रस्तुतकर्ता को setRssService(RssService rssService)
जोड़ सकता हूं और यूनिट परीक्षणों से नकली प्रदान करने के लिए इसका उपयोग कर सकता हूं, लेकिन यूनिट परीक्षणों के लिए यह विधि जोड़ना सही नहीं लगता है। इसे संभालने का सही तरीका क्या होगा?
पूर्णता के लिए यहां मॉड्यूल और घटक घोषणाओं हैं: जैसे कि परीक्षण करने के लिए इतना आसान नहीं है
@Singleton
@Component(modules = NetworkModule.class)
public interface NetworkComponent {
void inject(RssListPresenter presenter);
}
@Module
public class NetworkModule {
@Provides
Retrofit provideRetrofit() {
// ...
}
@Provides
@Singleton
RssService providePcWorldRssService(Retrofit retrofit) {
return retrofit.create(RssService.class);
}
}
एक बार के लिए: जब आपके पास यूनिट टेस्ट नहीं है तब तक आप कैसे जानते हैं कि यह ठीक काम करता है? और दूसरा: फ़ील्ड न तो 'निजी' और न ही 'अंतिम' है, इसलिए आप इसे अपने टेस्ट क्लास से सेट कर सकते हैं (यदि यह एक ही पैकेज में है)। –
1 - आप ऐप चलाते हैं, और जब फ़ील्ड इंजेक्शन नहीं होता है तो आप तुरंत परिणाम देखते हैं :), 2 - मुझे लगता है कि मैं नीचे दिए गए अनुसार इंजेक्शन इंजेक्शन के साथ जाऊंगा, लेकिन आपके सुझावों के लिए भी धन्यवाद। –
* "और जब क्षेत्र इंजेक्शन नहीं दिया जाता है तो आप तुरंत परिणाम देखते हैं :)" * ठीक है, लेकिन वह "डी फ्रैमवर्क काम करता है" और यह मेरी समझ नहीं है कि "सब ठीक काम करता है" जिसमें वास्तविक व्यवहार शामिल है * मेरे * कोड, किसी भी ढांचे का कोड नहीं। यही कारण है कि मैंने पूछा ...; ओ) –