2012-10-12 96 views
0

我正在学习有关升压单元测试,我发现,令人高兴的是,它可以检测内存泄漏,所以我测试它。我创建了以下方法可怕:升压单元测试不会失败

int ForTest::Compare(const ForTest item) 
{ 
    ForTest* existing_item = this; 
    char* x=new char[1024]; 
    m_name = std::string(x); 
    if (existing_item->m_count * existing_item->m_price == item.m_count * item.m_price) return 0; 
    if (existing_item->m_count * existing_item->m_price > item.m_count * item.m_price) return 1;  
    return -1; 
} 
BOOST_AUTO_TEST_CASE(a_test_case) 
{ 
    BOOST_TEST_CHECKPOINT("weird..."); 

    ForTest alpha("Pen", 4, 4.3); 
    ForTest beta; 

    BOOST_CHECK_EQUAL(alpha.Compare(beta), 1); 
} 

我明明在这里创造200个内存泄漏。为什么测试者不关心?我的测试通过了大胆的色彩。

我不希望有修改实际的代码,因为我在这里看到:http://www.boost.org/doc/libs/1_35_0/libs/test/example/exec_mon_example.cpp

为什么我没有得到一个错误?

+0

哪个平台,你运行的? Boost执行监视器内存泄漏检测仅适用于某些平台。 –

+0

Visual Studio 2010中,窗户 – Thalia

回答

0

我不知道提振,但得到的Visual Studio调试堆管理工作,你必须写类似的东西:

#include <crtdbg.h> 

#ifdef _DEBUG 
static char THIS_FILE[] = __FILE__; 
#define new new(_NORMAL_BLOCK, THIS_FILE, __LINE__) 
#endif 

int main() 
{ 
    _CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)); 
    new int(2036427631); // deliberate leak 
} 

由于泄漏的调试版本的输出看起来类似的东西:

Detected memory leaks! 
Dumping objects -> 
d:\fun\try\try.cpp(11) : {66} normal block at 0x00345C40, 4 bytes long. 
Data: <okay> 6F 6B 61 79 
Object dump complete. 
The program '[3216] try.exe: Native' has exited with code 0 (0x0). 

可能提升使用非常相同的东西来检测内存泄漏。

发行版本不检测内存泄漏原因是Visual Studio的“调试堆管理器”不会在发布版本。你认为他们为什么将其命名为“调试堆管理器”?

+0

谢谢,回答有关的事实,测试并不在发布工作我的问题。不过,我仍然试图制作Debug配置的副本,但未成功。我想我可以标记你的答案作为解决方案,并问一个单独的问题,为什么/怎么不工作,因为我将无法建立测试任何其他方式 - 调试必须能够运行实际可执行代码。 – Thalia

+0

@Michaela尝试生产最低限度比如单元测试,不为你工作。编译的东西。在这个过程中,您很可能会找到解决方案。 –

+0

我所有的其他单元测试工作。 (要么通过要么失败)。他们都编译。他们给出正确的预期结果。唯一不起作用的是创建一个Debug配置,这会产生内存泄漏。请看上面的例子。该测试不应该通过。它的确如此。 – Thalia