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

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;
}
  • Вопрос задан
  • 75 просмотров
Пригласить эксперта
Ответы на вопрос 3
IGHOR
@IGHOR
Qt/C++ DEV/CTO
В class A, либо в B создайте временный публичный метод в котором вызывайте приватный.
Ответ написан
vt4a2h
@vt4a2h
Software ingeneer (C++/Qt/boost)
Тут возникает вопрос, зачем вам напрямую тестировать недоступные из открытого интерфейса методы класса? Когда вы пишете модульные тесты для класса, закрытые методы будут протестированы через открытые. Если не будут, то они могут быть удалены, т.к. класс их не задействует :)
В крайнем случае, класс тестов можно сделать дружественным классу, закрытые методы которого вы собираетесь тестировать. Я только не понимаю, зачем.
Ответ написан
@Kobalt_x
C++ developer
В B void setProtected() override { A::setProtected(); }
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
HARMAN Connected Services Нижний Новгород
от 60 000 до 120 000 руб.
Soft Media Int. Пенза
от 125 000 до 225 000 руб.
от 140 000 до 200 000 руб.