hakain
@hakain
Немного знаю С/С++, Qt, и микроконтроллеры

TDD, каким образом протестировать приватные методы?

Как протестировать приватные методы, при этом оставив их приватными?
Была мысль создать класс наследник и переобъявить там методы публичными и использовать их в тестах, но насколько я понял это не работает.
class A {
public:
    A() {}
    void setPublic() { cout << "A: setPublic" << endl; }    
protected:
    virtual void setProtected() { cout << "A: setProtected" << endl; }
private:
};

class B: public A {
public:
    B() : A() {}
    void setProtected() override;
};

int main() {
    B b;
    b.setPublic();
    b.setProtected(); // ошибка
    return 0;
}
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Тут возникает вопрос, зачем вам напрямую тестировать недоступные из открытого интерфейса методы класса? Когда вы пишете модульные тесты для класса, закрытые методы будут протестированы через открытые. Если не будут, то они могут быть удалены, т.к. класс их не задействует :)
В крайнем случае, класс тестов можно сделать дружественным классу, закрытые методы которого вы собираетесь тестировать. Я только не понимаю, зачем.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
IGHOR
@IGHOR Куратор тега Qt
Qt/C++ DEV/CTO
В class A, либо в B создайте временный публичный метод в котором вызывайте приватный.
Ответ написан
@Kobalt_x
C++ developer
В B void setProtected() override { A::setProtected(); }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы