मुझे पता है कि यह एक बहस का अभ्यास है, लेकिन मान लीजिए कि यह मेरे लिए सबसे अच्छा विकल्प है। मैं इस बारे में सोच रहा हूं कि ऐसा करने के लिए वास्तविक तकनीक क्या है। मैं जो दृष्टिकोण देख रहा हूं वह यह है:
1) एक मित्र को उस वर्ग का बनाइए जिसकी विधि मैं परीक्षण करना चाहता हूँ।
2) मित्र वर्ग में, एक सार्वजनिक विधि (ओं) का निर्माण करें जो परीक्षण किए गए वर्ग की निजी पद्धति (ओं) को कहते हैं।
3) मित्र वर्ग के सार्वजनिक तरीकों का परीक्षण करें।
उपरोक्त चरणों का वर्णन करने के लिए यहां एक सरल उदाहरण दिया गया है:
#include <iostream>
class MyClass
{
friend class MyFriend; // Step 1
private:
int plus_two(int a)
{
return a + 2;
}
};
class MyFriend
{
public:
MyFriend(MyClass *mc_ptr_1)
{
MyClass *mc_ptr = mc_ptr_1;
}
int plus_two(int a) // Step 2
{
return mc_ptr->plus_two(a);
}
private:
MyClass *mc_ptr;
};
int main()
{
MyClass mc;
MyFriend mf(&mc);
if (mf.plus_two(3) == 5) // Step 3
{
std::cout << "Passed" << std::endl;
}
else
{
std::cout << "Failed " << std::endl;
}
return 0;
}
संपादित करें:
मैं देखता हूं कि एक उत्तर के बाद चर्चा में लोग मेरे कोड आधार के बारे में सोच रहे हैं।
मेरी कक्षा में ऐसी विधियाँ हैं जिन्हें अन्य विधियों द्वारा कहा जाता है; इन विधियों में से कोई भी वर्ग के बाहर नहीं बुलाया जाना चाहिए, इसलिए उन्हें निजी होना चाहिए। बेशक उन्हें एक विधि में रखा जा सकता है, लेकिन तार्किक रूप से वे बहुत अलग हैं। ये विधियां वारंट यूनिट परीक्षण के लिए पर्याप्त जटिल हैं, और प्रदर्शन के मुद्दों के कारण मुझे इन विधियों को फिर से कारक बनाना होगा, इसलिए यह सुनिश्चित करने के लिए एक परीक्षण करना अच्छा होगा कि मेरे पुन: फैक्टरिंग ने कुछ भी नहीं तोड़ा। मैं टीम पर काम करने वाला एकमात्र व्यक्ति नहीं हूं, हालांकि मैं केवल एक ही हूं जो इस परियोजना पर काम कर रहा है जिसमें परीक्षण भी शामिल हैं।
ऊपर कहा गया है, मेरा सवाल यह नहीं था कि क्या निजी तरीकों के लिए यूनिट परीक्षण लिखने के लिए यह एक अच्छा अभ्यास है, हालांकि मैं प्रतिक्रिया की सराहना करता हूं।