Tôi biết rằng đây là một thực tiễn tranh luận, nhưng hãy giả sử rằng đây là lựa chọn tốt nhất cho tôi. Tôi đang tự hỏi về kỹ thuật thực tế để làm điều này là gì. Cách tiếp cận mà tôi thấy là thế này:
1) Tạo một lớp bạn mà lớp tôi muốn kiểm tra.
2) Trong lớp bạn bè, tạo (các) phương thức công khai gọi (các) phương thức riêng của lớp được kiểm tra.
3) Kiểm tra các phương thức công khai của lớp bạn bè.
Dưới đây là một ví dụ đơn giản để minh họa các bước trên:
#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;
}
Biên tập:
Tôi thấy rằng trong các cuộc thảo luận sau một trong những câu trả lời mọi người đang tự hỏi về cơ sở mã của tôi.
Lớp của tôi có các phương thức được gọi bằng các phương thức khác; không có phương thức nào trong số các phương thức này được gọi bên ngoài lớp, vì vậy chúng nên ở chế độ riêng tư. Tất nhiên chúng có thể được đưa vào một phương thức, nhưng về mặt logic thì chúng tách biệt tốt hơn nhiều. Các phương pháp này đủ phức tạp để đảm bảo kiểm tra đơn vị, và do vấn đề về hiệu suất, tôi rất có thể sẽ phải tính lại các phương thức này, do đó, sẽ rất tốt nếu có một thử nghiệm để đảm bảo rằng việc bao thanh toán lại của tôi không phá vỡ bất cứ điều gì. Tôi không phải là người duy nhất làm việc trong nhóm, mặc dù tôi là người duy nhất đang làm việc trong dự án này bao gồm các bài kiểm tra.
Như đã nói ở trên, câu hỏi của tôi không phải là liệu có nên viết bài kiểm tra đơn vị cho các phương pháp riêng tư hay không, mặc dù tôi đánh giá cao phản hồi.