निजी तरीकों के परीक्षण की सार्थकता पर भिन्न राय हैं, उदाहरण के लिए, here और here। मैं व्यक्तिगत रूप से सोचता हूं कि यह समझ में आता है, सवाल यह है कि इसे ठीक से कैसे किया जाए। सी ++ आप एक #define
hack का उपयोग करें या परीक्षण वर्ग friend
कर सकते हैं, वहाँ InternalsVisibleToAttribute में सी # में, लेकिन जावा में हम या तो reflection उपयोग करने के लिए या और annotate them as such उन्हें "परीक्षण के लिए दिखाई दे" बनाने के लिए क्रम में आशय स्पष्ट करना है। दोनों के नुकसान काफी स्पष्ट होना चाहिए।जावा उपकरण?
मुझे लगता है कि कुछ बेहतर होना चाहिए।
public class Something {
private int internalSecret() {
return 43;
}
}
के साथ शुरू यह अच्छा होगा की तरह
@MakeVisibleForTesting Something something = new Something();
Assert.assertEquals(43, something.internalSecret());
यहाँ परीक्षण कोड में निजी तरीकों कॉल करने के लिए एनोटेशन चुपचाप प्रतिबिंब का उपयोग something
के निजी तरीकों के लिए सभी कॉल में बदल सकते हैं सक्षम होने के लिए। मुझे आश्चर्य है कि Lombok ऐसा कर सकता है (और लेखकों से पूछेगा)।
यह काफी संभव है कि इतना जादू करना बहुत जटिल साबित होता है, और किसी भी मामले में इसमें कुछ समय लगेगा, इसलिए मैं कुछ विकल्प ढूंढ रहा हूं। हो सकता है कि @Decapsulate
की तरह कुछ के साथ परीक्षण के अंतर्गत कक्षा व्याख्या और एक वर्ग Decapsulated_Something
उत्पन्न करने के लिए
public class Decapsulated_Something {
public Decapsulated_Something(Something delegate) {
this.delegate = delegate
}
public boolean internalSecret() {
// call "delegate.internalSecret()" using reflection
}
...
}
जो
Decapsulated_Something something = new Decapsulated_Something(new Something());
Assert.assertEquals(43, something.internalSecret());
का उपयोग करने की अनुमति होगी की तरह लग रही एक एनोटेशन प्रोसेसर का उपयोग मैं टिप्पणी के साथ ज्यादा अनुभव नहीं है प्रसंस्करण, इसलिए मैं यहां पहले पूछता हूं:
- इसे लागू करने के लिए कितना जटिल है?
- मुझे क्या भूल गया?
- सामान्य रूप से आप इसके बारे में क्या सोचते हैं?
क्या आप एक उपकरण पूछ रहे हैं, या खुद को कैसे लिखना है? – Raedwald
@ रेडवाल्ड मैं पूछ रहा हूं कि इसे कैसे हल किया जाए। खुद को विंग करना एक विकल्प है, लेकिन पहिया को फिर से शुरू करना स्पष्ट रूप से वांछित नहीं है। पैकेज निजी के लिए – maaartinus