Bunun tartışmalı bir uygulama olduğunu biliyorum, ama bunun benim için en iyi seçenek olduğunu varsayalım. Bunu yapmak için gerçek tekniğin ne olduğunu merak ediyorum. Gördüğüm yaklaşım şudur:
1) Test etmek istediğim yöntemin sınıf arkadaş sınıfını yapın.
2) Arkadaş sınıfında, sınanan sınıfın özel yöntemlerini çağıran genel bir yöntem (ler) oluşturun.
3) Arkadaş sınıfının genel yöntemlerini test edin.
Yukarıdaki adımları açıklamak için basit bir örnek:
#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;
}
Düzenle:
Görüşme, insanların kod tabanımı merak ettikleri cevaplardan birini izleyerek görüyorum.
Sınıfımda diğer yöntemlerle çağrılan yöntemler var; bu yöntemlerin hiçbiri sınıf dışında çağrılmamalı, bu yüzden özel olmalıdır. Tabii ki tek bir yönteme konabilirler, ancak mantıksal olarak çok daha iyi ayrılırlar. Bu yöntemler birim testini gerektirecek kadar karmaşıktır ve performans sorunları nedeniyle bu yöntemleri yeniden hesaba katmak zorunda kalacağım, bu nedenle yeniden faktoringimin hiçbir şeyi bozmadığından emin olmak için bir test yaptırmak güzel olurdu. Ekip üzerinde çalışan tek kişi ben değilim, ancak testler de dahil olmak üzere bu proje üzerinde çalışan tek kişi benim.
Yukarıdakileri söyledikten sonra, sorum, geri bildirimi takdir etsem de, özel yöntemler için birim testleri yazmanın iyi bir uygulama olup olmadığıyla ilgili değildi.