Какие тестовые рамки не заменяют «new» и «malloc»? - PullRequest
2 голосов
/ 10 января 2012

В моем текущем проекте я использую свои собственные пользовательские распределители, вдохновленные статьей о BitSquid . Я также заменяю new и malloc, чтобы помочь мне отследить, где они используются (поскольку это должно быть сведено к минимуму - в настоящее время нигде не вызывается.)

Я читал, что многие из более зрелых тестовых сред C ++ (например, CppUTest) полагаются на собственные перегрузки new / malloc. Есть ли там что-нибудь, что нет? Мой проект кроссплатформенный (Windows, Linux, Mac и мобильные телефоны), если это поможет.

(Edit: изначально забыл упомянуть, что мы не используем Boost)

Ответы [ 2 ]

3 голосов
/ 10 января 2012

Boost Tests, например, не основывается на его собственных новых перегрузках / malloc, я на самом деле использую BOOST TESTS, и я создал новые перегрузки / malloc, чтобы увидеть, где происходит (строка и файл) проверка памяти.

BOOST является кроссплатформенным, но так как я делаю всю свою разработку для окон, я использовал некоторые существующие перегрузки функций, подобных malloc ( crtdbg.h ), и просто перегрузил новый оператор. Если вам нужно, чтобы ваши тесты были кроссплатформенными, вы можете перегрузить malloc вручную.

приведенный ниже код является содержимым файла .h , который является последним включенным файлом каждого файла .cpp .

#ifdef _DEBUG

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW

#endif

Я использовал этот подход, потому что некоторые части boost (не часть тестирования) перегружают новый оператор, и у меня также есть другая библиотека, которая внутренне перегружает новый оператор, поэтому, включив это в конец списка включений, я уверен, что я не связывайтесь с внутренностями моих библиотек.

http://www.boost.org/doc/libs/1_48_0/libs/test/doc/html/index.html

1 голос
/ 10 января 2012

Если вы не хотите включать Boost или новую библиотеку и хотите просто убедиться, что распределение / перераспределение происходит правильно.Следуй этим шагам.1. Перегрузите свой новый.2. Добавьте механизм подсчета ссылок в ваш перегруженный новый.3. В вашем тестовом примере используйте assert для проверки количества ссылок в начале и в конце.

Это может показаться простой установкой, но устранит множество возможных утечек в самом модульном тестировании.

...