Я знаю, що це є дискусійною практикою, але припустимо, що це найкращий варіант для мене. Мені цікаво, що є власне технікою цього робити. Я бачу такий підхід:
1) Складіть клас друзів з класу, чий метод я хочу перевірити.
2) У класі друзів створіть загальнодоступні методи, які викликають приватні методи тестового класу.
3) Перевірте загальнодоступні методи класу друзів.
Ось простий приклад для ілюстрації вищезазначених кроків:
#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;
}
Редагувати:
Я бачу, що в ході дискусії, яка йде за однією з відповідей, люди задаються питанням про мою кодову базу.
У моєму класі є методи, які називаються іншими методами; жоден із цих методів не повинен називатися поза класом, тому вони повинні бути приватними. Звичайно, їх можна вкласти в один метод, але логічно вони набагато краще відокремитись. Ці методи є досить складними для того, щоб вимагати тестування підрозділу, і через проблеми з ефективністю мені, швидше за все, доведеться перефактурувати ці методи, отже, було б непогано провести тест, щоб переконатися, що мій повторний факторинг нічого не порушив. Я не єдиний, хто працює в команді, хоча я єдиний, хто працює над цим проектом, включаючи тести.
Сказавши сказане, моє запитання було не про те, чи є хорошою практикою писати одиничні тести для приватних методів, хоча я ціную відгуки.