Есть задача хранить некоторую информацию, например в std::map, заносить ее и получать, если информации не оказалось то загружать из файла. Схематично это выглядит вот так:
Есть класс
headerclass InfoHolder
{
std::string getInfo(std::string id);
void setInfo( std::string id, std::string info );
private:
void loadInfo();
std::string getInfoImpl(std::string id) const;
private:
std::map<std::string, std::string> _info;
};
и его реализация
sourceInfoHolder::setInfo(std::string id, std::string info)
{
//Реализация
}
InfoHolder::getInfo(std::string id)
{
std::string info = getInfoImpl(id);
if ( info.empty() )
loadInfo();
return getInfoImpl();
}
InfoHolder::getInfoImpl(std::string id) const
{
std::map<std::string, std::string>::const_iterator it = _info.find(id)
if ( it != _info.end() )
return it->second;
return "";
}
void helper()
{
//Что-то делает
}
InfoHolder::loadInfo()
{
//Читает из файла
//использует функцию helper();
}
Как покрыть тестами весь код, особенно функции в
private
. Вызывать public функции с разными аргументами? Переставлять из private в public? Делать дружественный класс для тестирования? И как протестировать вспомогательную функцию
helper()
. Не хочется тащить ее в заголовочный файл.
А как написать класс используя подход TDD?