Wiem, że jest to dyskusyjna praktyka, ale załóżmy, że jest to dla mnie najlepsza opcja. Zastanawiam się, jaka jest właściwa technika, aby to zrobić. Podejście, które widzę jest następujące:
1) Zrób klasę przyjaciela klasą, której metodę chcę przetestować.
2) W klasie przyjaciela utwórz metodę publiczną, która wywołuje metodę prywatną testowanej klasy.
3) Przetestuj publiczne metody klasy przyjaciela.
Oto prosty przykład ilustrujący powyższe kroki:
#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;
}
Edytować:
Widzę, że w dyskusji po jednej z odpowiedzi ludzie zastanawiają się nad moją bazą kodu.
Moja klasa ma metody wywoływane przez inne metody; żadna z tych metod nie powinna być wywoływana poza klasą, więc powinny być prywatne. Oczywiście można je zastosować w jednej metodzie, ale logicznie są one znacznie lepiej oddzielne. Metody te są na tyle skomplikowane, że wymagają testów jednostkowych, a ze względu na problemy z wydajnością najprawdopodobniej będę musiał ponownie rozważyć te metody, dlatego byłoby miło mieć test, aby upewnić się, że moje przefakturowanie niczego nie zepsuło. Nie tylko ja pracuję w zespole, ale tylko ja pracuję nad tym projektem, w tym nad testami.
Powiedziawszy powyższe, moje pytanie nie dotyczyło tego, czy dobrą praktyką jest pisanie testów jednostkowych dla metod prywatnych, choć doceniam informację zwrotną.