Je sais que c'est une pratique débattue, mais supposons que c'est la meilleure option pour moi. Je me demande quelle est la technique réelle pour ce faire. L'approche que je vois est la suivante:
1) Faites une classe d'amis celle de la classe dont je veux tester la méthode.
2) Dans la classe friend, créez une ou plusieurs méthodes publiques qui appellent la ou les méthodes privées de la classe testée.
3) Testez les méthodes publiques de la classe d'amis.
Voici un exemple simple pour illustrer les étapes ci-dessus:
#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;
}
Éditer:
Je vois que dans la discussion qui suit l'une des réponses, les gens s'interrogent sur ma base de code.
Ma classe a des méthodes qui sont appelées par d'autres méthodes; aucune de ces méthodes ne doit être appelée en dehors de la classe, elles doivent donc être privées. Bien sûr, ils pourraient être mis dans une seule méthode, mais logiquement, ils sont beaucoup mieux séparés. Ces méthodes sont suffisamment compliquées pour justifier des tests unitaires, et en raison de problèmes de performances, je devrai probablement recalculer ces méthodes, donc il serait bien d'avoir un test pour m'assurer que ma refactorisation n'a rien cassé. Je ne suis pas le seul à travailler dans l'équipe, même si je suis le seul à travailler sur ce projet incluant les tests.
Cela dit, ma question n'était pas de savoir si c'était une bonne pratique d'écrire des tests unitaires pour des méthodes privées, bien que j'apprécie les commentaires.