|
2 / 2 / 1
Регистрация: 27.11.2017
Сообщений: 57
|
|
GoogleTest. Тестирование потоков ввода/вывода для собственных классов16.12.2018, 00:18. Показов 7671. Ответов 8
Метки нет (Все метки)
Доброго времени суток, форумчане! У меня есть класс, для которого я написал перегрузку оператора ввода/вывода из потока. Возник вопрос - как с помощью GTest'ов протестировать перегруженный оператор ввода/вывода из потока в C++?
0
|
|
| 16.12.2018, 00:18 | |
|
Ответы с готовыми решениями:
8
Множественное наследование с использованием абстрактных базовых классов, файлового ввода-вывода с применением потоков С++, функций обработки исключи Переопределение ввода вывода для классов Исследовать структуру классов потокового ввода/вывода для работы с файлами в языке С++ |
| 16.12.2018, 01:34 | |
|
Вам нужно написать unit-тесты или интеграционные? Если unit, то не должно быть никаких внешних зависимостей от внешних API. Зависимости нужно изолировать с помощью инжектирования зависимостей, а зависимости заменить Mock-объектами, используя GMock фреймворк. Объяснять долго. Проще дать ссылку на книгу, где это объясняется подробно. В ней используются, как GTest и GMock, так и CppUTest и CppUMock: Modern C++ Programming with Test-Driven Development: Code Better, Sleep Better
Здесь рабочие примеры использовать GMock: Модульное тестирование c++ С этой серии видео туториалов можно списать примеры использования GMock: Google C++ Testing GTest GMock Framework Youtube
0
|
|
|
2 / 2 / 1
Регистрация: 27.11.2017
Сообщений: 57
|
|
| 16.12.2018, 01:41 [ТС] | |
|
У меня есть обычное консольное приложение. Я думал как-то записать информацию в поток (не через терминал), а затем с помощью геттеров проверить правильность считывания из потока в класс.
Да, я использую unit-тестирование.
0
|
|
| 16.12.2018, 02:25 | ||
|
Добавлено через 33 минуты Unit-тесты - это спецификация, то есть требования технического задания записанные в виде тестов. Можете сформулировать требования, что при таких-то условиях должно произойти то-то. Добавлено через 4 минуты То есть при каких условиях оператор вывода вернёт такой-то результат. Добавлено через 30 секунд То есть при каких условиях оператор вывода вернёт такой-то результат.
0
|
||
|
2 / 2 / 1
Регистрация: 27.11.2017
Сообщений: 57
|
|
| 22.12.2018, 16:12 [ТС] | |
|
А вот еще вопрос. Я не совсем понимаю, почему при запуске тестов в Debug все работает отлично, а в Release Появляется куча ошибок?
0
|
|
| 22.12.2018, 17:37 | |
|
Я подключаю GTest в Visual Studio исходниками. Папка весит "gtest-1.8.1" всего 1.4 МБайта, а в архиве она весит 285 КБайт. По-моему, если собрать GTest в Release и Debug, то будет больше весить. Сколько весит собранная библиотека GTest у вас? Я в решение создаю папку Libs, а в неё добавляю библиотеки, например: gtest-1.8.1, gmock-1.8.1 и т.д. Подключаю библиотеки по относительному пути, относительно $(SolutionDir), поэтому любой может скачать проект и сразу запустить. Из "src" нужно в проект нужно включить только один файл: "gtest-all.cc", и, конечно, подключить "include".
Проще мне скинуть проект для VS2015, а вы посмотрите в настройках, как я подключил: Calculator.zip Если у вас не VS2015, то в настройках нужно выбрать вашу версию VS здесь: Кликните здесь для просмотра всего текста
0
|
|
| 22.12.2018, 17:40 | |
|
По потокам я может вас неправильно понял. Не могли бы скинуть сюда весь код?
0
|
|
|
2 / 2 / 1
Регистрация: 27.11.2017
Сообщений: 57
|
|
| 23.12.2018, 06:09 [ТС] | |
|
Да, вот тут весь код имеется
https://github.com/IvanhoeKn/4th_Lab
0
|
|
| 23.12.2018, 10:42 | |
|
Рекомендую книгу по написанию кода через юнит-тестирование: The Art of Unit Testing with Examples in C#, Second Edition Есть перевод на русский, но он мне не нравится: Искусство автономного тестирования с примерами на С#.Да, примеры в ней на C#, но эта книга не про синтаксис языка, она о другом. Она подходит для программистов на C++, Java, Python и т.д.
В книге предлагают создать два проекта с именами: ProjectUnderTest и ProjectUnderTest.UnitTests. Если мы пишем калькулятор с именем решения Calculator, то в решении будет два проекта Calculator и Calculator.UnitTests В ProjectUnderTest создаётся файл [ClassName]Tests.cpp. В случае с калькулятором это CalculatorTests.cpp. В вашем случае должны быть сознаны разные файлы:
У вас же файл с тестами один и он назван "test.cpp", который имеет размер 1372 строк кода. Вы тесты для всех классов запихнули в один файл. Сейчас у вас только 7 классов, если у вас будут сотни классов? Этот файл будет расти, расти и расти. Он будет огромных размеров. В каждом классе может быть не несколько десятков методов, для которых нужно написать хотя бы несколько тестов. С какого-то момента файл будет настолько большим, что с ним невозможно будет нормально работать. Я вам советую изучать ту книгу выше и возьмите за основу мой рабочий пример Calculator.zip. Переделайте организацию тестов, как в нём, чтобы для каждого класса был отдельный файл с тестами.
1
|
|
| 23.12.2018, 10:42 | |
|
Помогаю со студенческими работами здесь
9
Как толком организовать тестирование в QtCreator (subdirs, GoogleTest) Перехват потоков ввода/вывода Закрытие потоков ввода/вывода Перехват потоков ввода/вывода Связывание потоков ввода-вывода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Контроль корректности заполнения дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|