मैं यूनिट परीक्षण के साथ अपना पहला कदम उठा रहा हूं और encapsulation के साथ समस्या है। मेरी कक्षा में कुछ निजी सदस्य चर हैं जो क्लाइंट को दिखाई नहीं दे सकते हैं, लेकिन मेरे लिए किसी राज्य में ऑब्जेक्ट डालने के लिए, मैं इसे जांचना चाहता हूं, मुझे उन निजी चर सेट करने की आवश्यकता है।यूनिट परीक्षण - वांछित ऑब्जेक्ट स्थिति प्राप्त करने के लिए निजी सदस्यों को सेट करना
मुझे लगता है कि जैसे एक कोड है कहते हैं: मैं Foo::action()
परीक्षण करना चाहते हैं
Class Foo {
public:
int action() ;
private:
int state ;
} ;
int Foo::action()
{
if(this->state == 1)
return 1 ;
else
return 0 ;
}
तो अब, लेकिन मैं विभिन्न परिदृश्यों के तहत समारोह की जाँच करने में सक्षम हो Foo::state
सेट करने में सक्षम होने की जरूरत है। एक समाधान परीक्षण कोड में बुराई "define private public
" है। लेकिन क्या कुछ और सुरुचिपूर्ण है? मैं तनाव देना चाहता हूं कि Foo::state
एक वैरिएबल है जिसे क्लाइंट द्वारा एक्सेस नहीं किया जाना चाहिए, इसलिए मैं कोई भी सार्वजनिक सेटटर घोषित नहीं करना चाहता हूं।
संपादित करें:
मैं अब, लगता है कि है कि व्युत्पन्न वर्ग में परीक्षण कोड में कक्षा मैं परीक्षण करना चाहते हैं का विस्तार और सहित setters काम करेगा प्रदान करने संरक्षित करने के लिए मैं निजी चर बदल दिया है। लेकिन यह एक 'पीढ़ी केवल' समाधान है और अभी भी एक उचित दृष्टिकोण के बजाय हैक की तरह लगता है।
संपादित करें 2:
जवाब और टिप्पणियों को पढ़ने के बाद मैं (Lieven और एपी के लिए धन्यवाद विशेष रूप से।) दिया गया था मेरा मानना है कि वास्तविक वर्ग मैं (नहीं सरल उदाहरण मैं प्रदान की गई) बस का परीक्षण करने के कोशिश कर रहा हूँ अब बहुत अधिक करता है और मेरी समस्या का उत्तर किसी अन्य तर्क को दूसरे वर्ग में ले जा रहा है जिसका उपयोग बड़े लड़के द्वारा किया जाएगा।
संभावित डुप्लिकेट [मैं एक ऐसे वर्ग का परीक्षण कैसे करूं जिसमें निजी विधियां, फ़ील्ड या आंतरिक कक्षाएं हों?] (Https://stackoverflow.com/questions/34571/how-do-i-test-a-class-that -हाउस-निजी-विधियों-फ़ील्ड-या-आंतरिक-वर्ग) – Raedwald