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

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

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

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

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

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

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

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

8
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
16.12.2018, 01:34 2
Вам нужно написать 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  [ТС] 3
У меня есть обычное консольное приложение. Я думал как-то записать информацию в поток (не через терминал), а затем с помощью геттеров проверить правильность считывания из потока в класс.
Да, я использую unit-тестирование.
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
16.12.2018, 02:25 4
Цитата Сообщение от Ivenho Посмотреть сообщение
Да, я использую unit-тестирование.
Unit тесты запрещают использование потоков, потому что потоки - это внешние зависимости, их нужно обернуть, а вызов должен быть перехвачен Mock-объектом. Если вы будете использовать потоки, то это уже не unit-тесты, а интеграционные.

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

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

Добавлено через 30 секунд
То есть при каких условиях оператор вывода вернёт такой-то результат.
0
2 / 2 / 1
Регистрация: 27.11.2017
Сообщений: 57
22.12.2018, 16:12  [ТС] 5
А вот еще вопрос. Я не совсем понимаю, почему при запуске тестов в Debug все работает отлично, а в Release Появляется куча ошибок?
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
22.12.2018, 17:37 6
Я подключаю 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
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
22.12.2018, 17:40 7
По потокам я может вас неправильно понял. Не могли бы скинуть сюда весь код?
0
2 / 2 / 1
Регистрация: 27.11.2017
Сообщений: 57
23.12.2018, 06:09  [ТС] 8
Да, вот тут весь код имеется
https://github.com/IvanhoeKn/4th_Lab
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
23.12.2018, 10:42 9
Рекомендую книгу по написанию кода через юнит-тестирование: 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
23.12.2018, 10:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2018, 10:42
Помогаю со студенческими работами здесь

Перехват потоков ввода/вывода
Уже 2 дня бьюсь над проблемой: на основе примера...

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru