Предполагается, что вы имеете в виду защищенный метод общедоступного класса:
В тестовом коде определите производный класс тестируемого класса (либо напрямую, либо из одного из его производных классов). Добавьте средства доступа для защищенных членов или выполните тесты в своем производном классе. «Защищенный» контроль доступа на самом деле не очень страшен в C ++: он не требует сотрудничества с базовым классом, чтобы «взломать» его. Поэтому лучше не вводить в базовый класс «тестовый код», даже декларацию друга:
// in realclass.h
class RealClass {
protected:
int foo(int a) { return a+1; }
};
// in test code
#include "realclass.h"
class Test : public RealClass {
public:
int wrapfoo(int a) { return foo(a); }
void testfoo(int input, int expected) {
assert(foo(input) == expected);
}
};
Test blah;
assert(blah.wrapfoo(1) == 2);
blah.testfoo(E_TO_THE_I_PI, 0);