Я пытаюсь реализовать поблочное тестирование на свой код, и мне нелегко делать его.
Идеально я хотел бы протестировать некоторые классы не только для хорошей функциональности, но также и для надлежащего выделения памяти / освобождение. Интересно, может ли эта проверка быть сделана с помощью платформы поблочного тестирования. Я использую Визуальный, Утверждают btw. Я хотел бы видеть некоторый пример кода, если возможный!
Функцию отладки можно использовать прямо в студии разработки для выполнения проверки на утечки - если ваши модульные тесты выполняются с использованием среды выполнения отладки c-runtime.
Простой пример мог бы выглядеть примерно так:
#include <crtdbg.h>
struct CrtCheckMemory
{
_CrtMemState state1;
_CrtMemState state2;
_CrtMemState state3;
CrtCheckMemory()
{
_CrtMemCheckpoint(&state1);
}
~CrtCheckMemory()
{
_CrtMemCheckpoint(&state2);
// using google test you can just do this.
EXPECT_EQ(0,_CrtMemDifference( &state3, &state1, &state2));
// else just do this to dump the leaked blocks to stdout.
if( _CrtMemDifference( &state3, &state1, &state2) )
_CrtMemDumpStatistics( &state3 );
}
};
И использовать его в модульном тесте:
UNIT_TEST(blah)
{
CrtCheckMemory check;
// TODO: add the unit test here
}
Некоторые инфраструктуры модульного тестирования выделяют свои собственные ресурсы - например, Google выделяет блоки, когда модульный тест не проходит, поэтому любой тест блок, у которого произошел сбой по любой другой причине, всегда также имеет ложноположительную «утечку».
Вы можете обнаружить утечку памяти в тестах, предоставив собственную реализацию функций new, delete, malloc и free, добавив информацию об отслеживании памяти при распределении.
Вы можете использовать библиотеку распределения Google tcmalloc , которая предоставляет heapchecker .
(Обратите внимание, что проверка кучи может добавить заметные накладные расходы на производительность вашей программы, поэтому вы вероятно хотите включить ее только в отладочных сборках или модульных тестах.)
И вы запросили пример кода, так что вот она .