升压单元测试主要功能?

时间:2012-09-21 11:19:25

标签: c++ unit-testing boost

如何在使用boost进行测试时定义自己的main()函数?

Boost正在使用它自己的主要功能,但我使用的是自定义内存管理器,需要在分配任何内存之前进行初始化,否则我会收到错误。

4 个答案:

答案 0 :(得分:12)

我不相信你真的需要你自己的主。我认为你用global fixture

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

BOOST_GLOBAL_FIXTURE( AllocatorSetup );

答案 1 :(得分:8)

你必须定义

BOOST_TEST_NO_MAIN

在提升包括之前

BOOST_TEST_MAIN

是默认值。 http://www.boost.org/doc/libs/1_36_0/libs/test/doc/html/utf/compilation.html

答案 2 :(得分:0)

你可以定义一个静态对象,他的构造函数将在main:

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

答案 3 :(得分:-1)

可以在main之前分配内存:

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

你也可以让你的记忆管理员成为一个全局变量 但是您无法强制执行全局变量初始化的特定顺序。 (至少在标准C ++中)

在Windows中,您可以将内存管理器放入DLL中,它将在调用应用程序入口点之前进行初始化,但仍然可以在之前分配内存 - 另一个DLL或DLL的CRT。