![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
Мне нужно нужно написать свой собственные стримы потомки от стримов базовой библиотеки. Как это сделать?
Мне это нужно чтобы функции в уже написанном коде работали с моим стримом. Сейчас они либо принимают const std::istream&, либо std::ostream& и std::iostream& Я хочу подавать свой TestAPI::Mock::TestStream в целях тестирования. Вопрос как написать этот стрим? Пока нашел HOWTO: Свой поток ввода-вывода , но что-то слишком заумное Мысль вслух: Может потомка стримов вообще не нужно писать и есть способ через написания sentry внутреннего драйвера для стандартных стримов, но я что-то не представляю как это реализовать. Прошу пнуть в нужном направлении ) Спасибо! |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
||||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
Нет! Во-первых : В Unit-тестах не должно быть работы с файловой системой Во-Вторых: Даже если и сделать на fstream это означает юнит-тесты будут зависеть от файловых путей. Нужен именно стрим дополнительный для тестовых целей |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
не очень понимаю почему
ну тогда есть stringstream. причем его контент (как и файл) можно не только задавать статически, но и генерировать программно Добавлено через 2 минуты и 24 секунды у вас весь проект в определенной мере зависит от файловых путей. поместите тестовые файлы внутрь проекта, и зависимостей не станет больше. также можно создавать временные файлы во время теста. |
|||
|
||||
| EvilsInterrupt |
|
||||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
У меня код ориентирован на работу с бинарными данными, а не со строками. Use-story вида: Прочитать заголовок из стрима - прочитать из поля офсет другого заголовка - перейти по осфету - зачитать этот заголовок и т.д. А stringstream предназначен прежде всего для работы со строками, что может вводить в заблуждение читающего код.
Это уже не юнит-тест, это уже другой тип тестирования "интеграционный" |
||||
|
|||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
Попробую пояснить почему. Дело в том что Юнит-тесты это прежде всего скорость работы! Если они будут работать медленно, то программер будет откладывать их запуск. Напомню очевидность, которую Вы давно уже знаете: Операции с файлами значительно медленнее чем операции с памятью. Их можно включить в Post build event в вашем средстве разработки в debug-сборке, что я и делаю. Юнит-тест это своего рода выдирание какой-то части кода из продукта и помещение его на время в тестовые условия. Мы сами вольны выбирать откуда будут приходить тестовые данные толи из памяти, толи из файла, но ведь мы тестируем часть кода, а не работу с файлами, так зачем же нам замедлять процесс тестирования чтением файловой системы? |
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
...кажется мне надо писать потомка std::basic_streambuf...
|
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
||||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
baldina, Вопрос исчерпан, писать ничего дополнительно не нужно итак все есть. Спасибо!
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |