2 / 2 / 1
Регистрация: 27.11.2017
Сообщений: 57
|
|
1 | |
GoogleTest. Тестирование потоков ввода/вывода для собственных классов16.12.2018, 00:18. Показов 6467. Ответов 8
Метки нет (Все метки)
Доброго времени суток, форумчане! У меня есть класс, для которого я написал перегрузку оператора ввода/вывода из потока. Возник вопрос - как с помощью GTest'ов протестировать перегруженный оператор ввода/вывода из потока в C++?
0
|
16.12.2018, 00:18 | |
Ответы с готовыми решениями:
8
Множественное наследование с использованием абстрактных базовых классов, файлового ввода-вывода с применением потоков С++, функций обработки исключи Переопределение ввода вывода для классов Исследовать структуру классов потокового ввода/вывода для работы с файлами в языке С++ Как толком организовать тестирование в QtCreator (subdirs, GoogleTest) |
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
|
16.12.2018, 02:25 | 4 |
Unit тесты запрещают использование потоков, потому что потоки - это внешние зависимости, их нужно обернуть, а вызов должен быть перехвачен Mock-объектом. Если вы будете использовать потоки, то это уже не unit-тесты, а интеграционные.
Добавлено через 33 минуты Unit-тесты - это спецификация, то есть требования технического задания записанные в виде тестов. Можете сформулировать требования, что при таких-то условиях должно произойти то-то. Добавлено через 4 минуты То есть при каких условиях оператор вывода вернёт такой-то результат. Добавлено через 30 секунд То есть при каких условиях оператор вывода вернёт такой-то результат.
0
|
2 / 2 / 1
Регистрация: 27.11.2017
Сообщений: 57
|
|
22.12.2018, 16:12 [ТС] | 5 |
А вот еще вопрос. Я не совсем понимаю, почему при запуске тестов в Debug все работает отлично, а в Release Появляется куча ошибок?
0
|
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
|
2 / 2 / 1
Регистрация: 27.11.2017
Сообщений: 57
|
|
23.12.2018, 06:09 [ТС] | 8 |
Да, вот тут весь код имеется
https://github.com/IvanhoeKn/4th_Lab
0
|
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. В вашем случае должны быть сознаны разные файлы:
У вас же файл с тестами один и он назван "test.cpp", который имеет размер 1372 строк кода. Вы тесты для всех классов запихнули в один файл. Сейчас у вас только 7 классов, если у вас будут сотни классов? Этот файл будет расти, расти и расти. Он будет огромных размеров. В каждом классе может быть не несколько десятков методов, для которых нужно написать хотя бы несколько тестов. С какого-то момента файл будет настолько большим, что с ним невозможно будет нормально работать. Я вам советую изучать ту книгу выше и возьмите за основу мой рабочий пример Calculator.zip. Переделайте организацию тестов, как в нём, чтобы для каждого класса был отдельный файл с тестами.
1
|
23.12.2018, 10:42 | |
23.12.2018, 10:42 | |
Помогаю со студенческими работами здесь
9
Перехват потоков ввода/вывода Закрытие потоков ввода/вывода Перехват потоков ввода/вывода Связывание потоков ввода-вывода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |