আমি জানি যে এটি একটি বিতর্কিত অনুশীলন, তবে ধরা যাক এটি আমার পক্ষে সেরা বিকল্প। এটি করার আসল কৌশলটি কী তা নিয়ে আমি ভাবছি। যে পদ্ধতিটি আমি দেখছি তা হ'ল:
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;
}
সম্পাদনা:
আমি দেখতে পাচ্ছি যে উত্তরগুলির একটির পরে আলোচনায় লোকেরা আমার কোড বেস সম্পর্কে ভাবছেন।
আমার ক্লাসে এমন পদ্ধতি রয়েছে যা অন্যান্য পদ্ধতি দ্বারা ডাকা হয়; এই পদ্ধতির কোনওটিকেই ক্লাসের বাইরে কল করা উচিত নয়, তাই এগুলি ব্যক্তিগত হওয়া উচিত। অবশ্যই তাদের একটি পদ্ধতিতে রাখা যেতে পারে, তবে যৌক্তিকভাবে তারা অনেক ভাল পৃথক। ইউনিট পরীক্ষার পরোয়ানা পাওয়ার জন্য এই পদ্ধতিগুলি যথেষ্ট জটিল, এবং পারফরম্যান্স সমস্যার কারণে আমাকে খুব সম্ভবত এই পদ্ধতিগুলি পুনরায় ফ্যাক্টর করতে হবে, অতএব আমার পুনঃ-ফ্যাক্টরিংটি কোনও কিছু ভঙ্গ করে না তা নিশ্চিত করার জন্য একটি পরীক্ষা করা ভাল হবে। আমি একমাত্র এই দলে কাজ করছি না, যদিও এই প্রকল্পে আমিই একমাত্র কাজ করে যাচ্ছি including
উপরের কথাটি বলার পরে, আমার প্রশ্নটি ব্যক্তিগত পদ্ধতির জন্য ইউনিট পরীক্ষা লেখার পক্ষে একটি ভাল অনুশীলন কিনা তা নিয়ে ছিল না, যদিও আমি প্রতিক্রিয়ার প্রশংসা করি।