2012-09-21 114 views
8

在使用boost進行測試時,如何定義我自己的main()函數?增強單元測試主要功能?

Boost正在使用它自己的主函數,但是我使用的是自定義的內存管理器,它需要在任何內存分配之前進行初始化,否則我會得到錯誤。

+0

在C++中,'main'不是一種方法。 – jalf

回答

11

我不相信你真的需要你自己的主人。我認爲你更好用global fixture

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

BOOST_GLOBAL_FIXTURE(AllocatorSetup); 
+0

對於OP的目的來說,這似乎是最合適的。 –

-1

內存可以main之前被分配:

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

而且你可以使你的內存管理器的全局變量,以及,
但你不能強制全局變量初始化的特定順序。 (至少在標準C++中)

在Windows中,你可以將你的內存管理器放到一個DLL中,在它被初始化之前,應用程序入口點將被調用,但是其他的可能會先分配一個內存 - 另一個DLL,或者你的DLL的CRT。

+0

全局變量的初始化順序在單個編譯單元內定義良好 - 因此您可以執行任何您想要的順序。只需將它們放在一個CU中即可:) – Fiktik

0

可以定義靜態對象和他的構造函數會前主要執行:

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

這不僅僅是一種解決方案,它還不允許您定義自己的主要功能。沒問題,我找到了答案。 – ProgrammerAtWork