Повысить юнит тестирование основной функции?

Как я могу определить свой собственный main() функция при тестировании с наддувом?

Boost использует свою собственную основную функцию, но я использую собственный менеджер памяти, и его нужно инициализировать перед выделением какой-либо памяти, иначе я получу ошибки.

4 ответа

Решение

Я не верю, что тебе на самом деле нужен твой главный. Я думаю, что вам гораздо лучше с глобальным приспособлением:

struct AllocatorSetup {
    AllocatorSetup()   { /* setup your allocator here */ }
    ~AllocatorSetup()  { /* shutdown your allocator/check memory leaks here */ }
};

BOOST_GLOBAL_FIXTURE( AllocatorSetup );

Вы должны определить

BOOST_TEST_NO_MAIN

до повышения включает в себя.

BOOST_TEST_MAIN

по умолчанию. http://www.boost.org/doc/libs/1_36_0/libs/test/doc/html/utf/compilation.html

Вы можете определить статический объект, и его конструктор будет выполняться до main:

class Alloc_Setup {
   Alloc_Setup() {
       // Your init code
   }
   ~Alloc_Setup() {
       // Your cleanup
   }
};
Alloc_Setup setup;
int main() {} // (generated by boost)

Память может быть выделена раньше main:

static int* x = new int(1);
int main() { return *x; }

И вы могли бы сделать свой менеджер памяти глобальной переменной,
но вы не можете навязать определенный порядок инициализации глобальных переменных. (в стандарте C++ по крайней мере)

В Windows вы можете поместить свой менеджер памяти в DLL, при этом он будет инициализирован до вызова точки входа в приложение, но, тем не менее, что-то другое может выделить память раньше - другую DLL или CRT вашей DLL.

Другие вопросы по тегам