Saya tahu ini adalah praktik yang diperdebatkan, tetapi anggaplah ini adalah pilihan terbaik bagi saya. Saya bertanya-tanya tentang apa teknik sebenarnya untuk melakukan ini. Pendekatan yang saya lihat adalah ini:
1) Buat kelas teman dari kelas yang metode yang ingin saya uji.
2) Di kelas teman, buat metode publik yang memanggil metode pribadi dari kelas yang diuji.
3) Uji metode publik dari kelas teman.
Berikut adalah contoh sederhana untuk menggambarkan langkah-langkah di atas:
#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;
}
Edit:
Saya melihat bahwa dalam diskusi mengikuti salah satu jawaban orang bertanya-tanya tentang basis kode saya.
Kelas saya memiliki metode yang dipanggil dengan metode lain; tidak satu pun dari metode ini harus dipanggil di luar kelas, sehingga harus bersifat pribadi. Tentu saja mereka dapat dimasukkan ke dalam satu metode, tetapi secara logis mereka jauh lebih baik terpisah. Metode ini cukup rumit untuk menjamin pengujian unit, dan karena masalah kinerja saya kemungkinan besar harus faktor ulang metode ini, maka akan lebih baik untuk memiliki tes untuk memastikan bahwa re-factoring saya tidak merusak apa pun. Saya bukan satu-satunya yang bekerja di tim, meskipun saya satu-satunya yang mengerjakan proyek ini termasuk tes.
Setelah mengatakan hal di atas, pertanyaan saya bukan tentang apakah itu praktik yang baik untuk menulis unit test untuk metode pribadi, meskipun saya menghargai umpan baliknya.