Код: Выделить всё
class Obj;
class Helper {
friend class Obj;
private:
int m_count;
Helper(){ m_count = 0;}; // Note this is a private constructor
void incrementCount(){
++m_count;
};
};
class Obj {
Helper *m_pHelper;
// note that this is a private getter
int getHelperCount() { return m_pHelper->m_count; };
// the public API starts here
public:
Obj() { m_pHelper = new Helper(); };
void incrementCount(){ m_pHelper->incrementCount(); };
};
Код: Выделить всё
auto obj = new Obj();
obj->incrementCount();
// what to assert???
Ответ на некоторые ответы и комментарии.
< blockquote>
Если никто за пределами класса не должен быть заинтересован, то и ваши тесты не должны быть заинтересованы. – Арне Мерц
Если никого не интересуют ценности вне класса, почему вы – утнапистим
Даже если никому извне это значение не нужно, я все равно хочу знать, правильно ли оно установлено, поскольку оно используется другим автономным внутренним методом класса, который использует это значение. Возможно, значение — это скорость, с которой контроллер будет использовать ее для обновления модели. Или, может быть, это позиция, в которой представление будет использовать ее для рисования чего-либо на экране. И фактически все остальные компоненты Obj смогут получить доступ к этой переменной. Возможно, это проблема с дизайном, и в этом случае я хотел бы знать, какие альтернативы у меня могут быть получше. Дизайн указан в разделе «Справочная информация» внизу этого сообщения.
определите частное общедоступное – Марсон Мао
Люблю это гениальное злоупотребление ключевыми словами, ха-ха. Но пока это не лучшее решение.
Вам нужно «раскрыть» дружеские отношения в заголовке вашего класса. Таким образом, вы должны признать существование класса, используемого для тестирования вашего.
Если вы используете идиому pImpl, вы можете сделать все члены самого pImpl общедоступными, а сам pImpl — закрытым и предоставить вашим модульным тестам доступ к pImpl - CashCow
Означает ли это, что мне следует добавить тест в мой исходный класс? Или добавить к нему дополнительные «тестовые» методы?
Я совсем недавно начал TDD. Часто ли (или, лучше, хорошо) вторгаться в исходный класс с зависимостью тестового класса? Я не думаю, что у меня есть необходимые знания, чтобы судить. Есть какие-нибудь советы по этому поводу?
Разное: AFAIK TDD — это не просто написание тестов, а процесс разработки. Я читал, что мне следует писать тесты только для публичного интерфейса. Но проблема в том, что, как и в рассматриваемой ситуации, большинство кодов и т. д. содержатся в частном классе. Как я могу использовать TDD для создания этих кодов?
Справочная информация
К вашему сведению, если вы хотите знать, почему я создаю частный класс:
Я разрабатываю игру для cocos2dx. Игровой движок использует древовидную структуру Node для обновлений, рендеринга и т. д., и каждый игровой объект будет наследоваться от класса Node, предоставленного в движке. Теперь я хочу реализовать шаблон MVC в игровом объекте. Итак, для каждого объекта я создал класс Object с тремя вспомогательными классами, соответствующими каждому из компонентов MVC, с именами ObjectModel, ObjectView, ObjectController. Теоретически никто не должен обращаться к классам MVC напрямую, и доступ к ним будет возможен только через класс Object, поэтому я делаю три из них частными. Причина создания компонентов MVC явно как классов заключается в том, что представление и контроллер обновляются с разной скоростью (точнее, контроллер выполняет обновления, зависящие от кадра, а представление выполняет простую интерполяцию на основе данных модели). Класс Model создан исключительно по религиозным соображениям, лол.
Заранее спасибо.
Подробнее здесь: https://stackoverflow.com/questions/252 ... vate-class
Мобильная версия