Найти в Дзене
Всё что вы хотели знать об умных указателях в С++
Сегодня поговорим об использовании интеллектуальных указателей в реальных проектах. Разберем вопросы о том каковы основные сценарии использования weak_ptr в паре с shared_ptr, как устроены shared_ptr и weak_ptr "под капотом", изучим накладные расходы при использовании shared_ptr и weak_ptr, а также большое количество связанных с этим проблем. Предполагается наличие у читателя предварительных знаний о назначении интеллектуальных указателей. Использование std::weak_ptr вместе с std::shared_ptr —...
3 недели назад
Применяем пользовательские типы для предотвращения ошибок в передаче параметров в С++
Допустим что перед нами стоит задача разработать тип данных, задающий положение на плоскости некторой точки, например, персонажа компьютерной игры. Первый вариант может выглядеть следующим образом: class Coord { int x_, y_; public: Coord(int x, int y) : x_(x), y_(y) {} //далее идут методы для работы с координатами }; Несмотря на крайнюю простоту, при использовании Coord может возникнуть проблема, связанная с тем, что оба параметра конструктора имеют один и тот же тип. Следовательно, передаваемые...
1 месяц назад
Тестируем код зависящий от временных интервалов
Представим что Вам нужно протестировать функцию, которая работает со временем, ожидая, к примеру, 5 секунд. Как протестировать такой код в google mock чтобы при каждом прогоне теста не ждать 5 секунд? Для того, чтобы тесты выполнялись мгновенно, необходимо вынести функционал работы с системным временем в отдельную абстракцию. Вместо прямого вызова std::this_thread::sleep_for или использования std::chrono::system_clock код должен обращаться к интерфейсу, абстрагирующему работу со временем. class...
1 месяц назад
Пишем фейковые объекты для тестов c Google Mock
В модульном тестировании фейк - это ограниченная реализация более сложного механизма, выполненная для упрощения процесса. Примером может служить использование объекта класса std::map вместо реальной базы данных. Другими словами, фейк - это упрощенная, но рабочая реализация зависимости тестируемого функционала. Есть два основных способа использовать gmock и gtest для фейков: Пусть мы разрабатываем систему хранения данных, где клиент взаимодействует с базой не напрямую, а через класс DBStorer. Одним...
1 месяц назад
Тестируем реализацию шаблона проектирования singleton c Google Mock
Согласно Википедии «синглтон» - это шаблон, ограничивающий создание экземпляра класса одним единственным экземпляром. Он описан в книге о паттернах проектирования «Банды четырёх», посвещенной способам решения повторяющихся проблем в объектно-ориентированном программировании. Паттерн используется когда в системе необходимо обеспечить существование ровно одного объекта. Шаблон «синглтон» позволяет: Пусть «синглтон» нужен для того чтобы гарантировать наличие только одного объекта Logger, записывающего сообщения в std::cout...
1 месяц назад
Учимся писать тестируемый код и проверять его с Google Mock
К числу основных требований, предъявляемых к модульным тестам, можно отнести следующие: Однако выполнить их далеко не всегда бывает просто. Разработчики зачастую не задумываются о вопросах тестирования, и пишут код в котором объекты одного класса будут создавать внутри себя объекты другого класса, а те, в свою очередь, объекты третьего класса и т.д. В результате проверяемый код будет требовать большое количество зависимостей, что крайне затрудняет процесс тестирования. Хуже того, код может быть связан с внешней системой и зависеть от её состояния...
1 месяц назад
Знакомство с библиотекой Google Test
Google Test(gtest) является одной из популярных библиотек модульного тестирования. Тесты не требуется отдельно регистрировать для запуска. Каждый объявленный в программе тест автоматически будет запущен. Тесты можно объединять в группы (наборы). Кроме того, gtest позволяет использовать тестовые классы/фикстуры (test fixture). С их помощью можно создавать и повторно использовать конфигурацию объектов для нескольких различных тестов. Пусть нужно протестировать отдельную функцию с сигнатурой int Fibonacci(int n), осуществляющую расчет n-го числа Фибоначчи...
1 месяц назад
Тестируем код c Google Test, используя паттерн ААА, на основе классов эквивалентности
При тестирования кода перед разработчиком сразу возникает два вопроса: Ответы на них необходимо искать с использованием классов эквивалентности. Классы эквивалентности — это техника проектирования тестов, при которой входные данные разбиваются на группы (классы), внутри которых программа должна вести себя одинаково. Поэтому достаточно протестировать один представитель из каждого класса, вместо проверки всех возможных значений. Эта техника называется Equivalence Partitioning и используется в модульных, интеграционных и функциональных тестах...
2 месяца назад
Здравствуйте, уважаемые читатели! Написал очередную статью на Хабре, посвященную обработке событий при помощи epoll и сопрограмм на С++ для ОС Linux. Кого интересует данная тема прошу ознакомиться. Возникшие вопросы можно задавать в комментариях.
5 месяцев назад
Здравствуйте, уважаемые читатели! Начал писать статьи для Хабра. На данный момент опубликовал первую и вторую статью по написанию корутин на языке Си. Кого интересует данная тема прошу ознакомиться. Возникшие вопросы можно задавать в комментариях.
6 месяцев назад
CMake от начинающего до опытного. Часть 7 - Автоматизируем выявление ошибок в программе при помощи Valgrind.
Иногда после внесения изменений в исходный код и запуска программы появляются странные ошибки. Например, программа зависает, не реагируя на действия пользователя, и аварийно завершается(падает). Либо зависания не происходит, но программа падает. Иногда даже анализ логов не добавляет ясности, так как падение происходит в том месте исходного кода, которое не вызывает подозрений (по крайней мере на первый взгляд). Некоторые ошибки можно выявить при прогоне тестов. Но они не всегда помогают. Теоретически...
1 год назад
Устанавливаем библиотеки Boost с помощью пакетного менеджера Conan
В мире, наверное, не найдется ни одного программиста на С++, который не слышал о Boost. Boost — собрание библиотек классов, использующих функциональность языка C++, и предоставляющих удобный кроссплатформенный высокоуровневый интерфейс для решения различных задач программирования, таких как работа с файлами, потоками, регулярными выражениями, генерацией псевдослучайных чисел, обработкой изображений, модульным тестированием и т. п. Библиотеки распространяется по лицензии Boost Software License, разработанной...
108 читали · 1 год назад