ฉันรู้ว่านี่เป็นวิธีปฏิบัติที่ถกเถียงกัน แต่สมมติว่านี่เป็นตัวเลือกที่ดีที่สุดสำหรับฉัน ฉันสงสัยเกี่ยวกับเทคนิคที่แท้จริงในการทำสิ่งนี้ วิธีการที่ฉันเห็นคือ:
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;
}
แก้ไข:
ฉันเห็นว่าในการอภิปรายต่อไปนี้หนึ่งในคำตอบที่ผู้คนสงสัยเกี่ยวกับรหัสฐานของฉัน
ชั้นเรียนของฉันมีวิธีการที่เรียกโดยวิธีอื่น ไม่ควรใช้วิธีการเหล่านี้นอกห้องเรียนดังนั้นจึงควรเป็นแบบส่วนตัว แน่นอนว่าพวกเขาสามารถใช้วิธีการหนึ่งได้ วิธีการเหล่านี้มีความซับซ้อนมากพอที่จะรับประกันการทดสอบหน่วยและเนื่องจากปัญหาด้านประสิทธิภาพฉันมีแนวโน้มที่จะต้องคำนึงถึงวิธีการเหล่านี้อีกครั้งดังนั้นจึงเป็นการดีที่จะมีการทดสอบเพื่อให้แน่ใจว่าการกู้คืนแฟคตอริ่ง ฉันไม่ใช่คนเดียวที่ทำงานในทีม แต่ฉันเป็นคนเดียวที่ทำงานในโครงการนี้รวมถึงการทดสอบ
จากที่กล่าวมาข้างต้นคำถามของฉันไม่ได้เกี่ยวกับว่าเป็นวิธีปฏิบัติที่ดีในการเขียนการทดสอบหน่วยสำหรับวิธีการส่วนตัว แต่ฉันขอขอบคุณข้อเสนอแนะ