Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/34: Рейтинг темы: голосов - 34, средняя оценка - 5.00
2 / 2 / 1
Регистрация: 27.11.2017
Сообщений: 57

GoogleTest. Тестирование потоков ввода/вывода для собственных классов

16.12.2018, 00:18. Показов 7671. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, форумчане! У меня есть класс, для которого я написал перегрузку оператора ввода/вывода из потока. Возник вопрос - как с помощью GTest'ов протестировать перегруженный оператор ввода/вывода из потока в C++?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.12.2018, 00:18
Ответы с готовыми решениями:

Множественное наследование с использованием абстрактных базовых классов, файлового ввода-вывода с применением потоков С++, функций обработки исключи
Создать программу с абстрактным базовым классом и множественным наследованием, реализовать в нем: • конструктор, • деструктор, ...

Переопределение ввода вывода для классов
#include "stdafx.h" #include "stdio.h" #include <clocale> #include <iomanip> #include <fstream> #include <string> #include...

Исследовать структуру классов потокового ввода/вывода для работы с файлами в языке С++
Здравствуйте нужна помощь в задании по с++. Задание 1. Исследовать структуру классов потокового ввода / вывода для работы с файлами...

8
9948 / 2948 / 497
Регистрация: 05.10.2013
Сообщений: 8,019
Записей в блоге: 242
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
9948 / 2948 / 497
Регистрация: 05.10.2013
Сообщений: 8,019
Записей в блоге: 242
16.12.2018, 02:25
Цитата Сообщение от Ivenho Посмотреть сообщение
Да, я использую unit-тестирование.
Unit тесты запрещают использование потоков, потому что потоки - это внешние зависимости, их нужно обернуть, а вызов должен быть перехвачен Mock-объектом. Если вы будете использовать потоки, то это уже не unit-тесты, а интеграционные.

Добавлено через 33 минуты
Unit-тесты - это спецификация, то есть требования технического задания записанные в виде тестов. Можете сформулировать требования, что при таких-то условиях должно произойти то-то.

Добавлено через 4 минуты
То есть при каких условиях оператор вывода вернёт такой-то результат.

Добавлено через 30 секунд
То есть при каких условиях оператор вывода вернёт такой-то результат.
0
2 / 2 / 1
Регистрация: 27.11.2017
Сообщений: 57
22.12.2018, 16:12  [ТС]
А вот еще вопрос. Я не совсем понимаю, почему при запуске тестов в Debug все работает отлично, а в Release Появляется куча ошибок?
0
9948 / 2948 / 497
Регистрация: 05.10.2013
Сообщений: 8,019
Записей в блоге: 242
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
9948 / 2948 / 497
Регистрация: 05.10.2013
Сообщений: 8,019
Записей в блоге: 242
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
9948 / 2948 / 497
Регистрация: 05.10.2013
Сообщений: 8,019
Записей в блоге: 242
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. В вашем случае должны быть сознаны разные файлы:
  • MilitaryCharacteristicsTests.cpp
  • WeaponTests.cpp
  • AircraftTests.cpp
  • CaptainTests.cpp
  • CoverShipTests.cpp
  • CarrierTests.cpp
  • AircraftCarrierTests.cpp

У вас же файл с тестами один и он назван "test.cpp", который имеет размер 1372 строк кода. Вы тесты для всех классов запихнули в один файл. Сейчас у вас только 7 классов, если у вас будут сотни классов? Этот файл будет расти, расти и расти. Он будет огромных размеров. В каждом классе может быть не несколько десятков методов, для которых нужно написать хотя бы несколько тестов. С какого-то момента файл будет настолько большим, что с ним невозможно будет нормально работать.

Я вам советую изучать ту книгу выше и возьмите за основу мой рабочий пример Calculator.zip. Переделайте организацию тестов, как в нём, чтобы для каждого класса был отдельный файл с тестами.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.12.2018, 10:42
Помогаю со студенческими работами здесь

Как толком организовать тестирование в QtCreator (subdirs, GoogleTest)
Доброго дня! Хотелось бы уяснить, как лучше всего организовать тестирование с помощью GoogleTest в QtCreator. К сожалению, и с GTest,...

Перехват потоков ввода/вывода
Уже 2 дня бьюсь над проблемой: на основе примера http://www.sources.ru/cpp/using_anonymous_pipes.shtml запускаю программу (не мою,...

Закрытие потоков ввода/вывода
Почему закрытие потоков ввода/вывода в блоке finally считается плохой практикой ?

Перехват потоков ввода/вывода
Проблема в следующем: Имеется консольное приложение, например такое: //1.exe #include <iostream> using namespace std; int...

Связывание потоков ввода-вывода
cin.tie(&cout); cout<<"Enter x: "; cin>>x; для чего применяется связывание? а то чтот не доходит:) и чем несвязанные потоки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Контроль корректности заполнения дат в зависимости от значения перечислений
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
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru