【问题标题】:boost Unit test doesn't fail提升单元测试不会失败
【发布时间】:2012-10-13 02:47:09
【问题描述】:

我正在学习 boost 单元测试,我很高兴地发现它可以检测内存泄漏,所以我正在测试它。我创建了以下可怕的方法:

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);  
}

我显然在这里创建了 2 个内存泄漏。为什么测试人员不关心?我的测试顺利通过。

我不想修改实际代码,正如我在这里看到的那样:http://www.boost.org/doc/libs/1_35_0/libs/test/example/exec_mon_example.cpp

为什么我没有收到错误消息?

【问题讨论】:

  • 您在哪个平台上运行? Boost Execution Monitor 内存泄漏检测仅适用于某些平台。

标签: c++ unit-testing boost


【解决方案1】:

我不确定提升,但要让 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
}

由于它泄漏了 DEBUG 版本的输出将如下所示:

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).

可能 boost 使用相同的东西来检测内存泄漏。

RELEASE 版本不检测内存泄漏,因为 Visual Studio 的“调试堆管理器”在 RELEASE 版本中不起作用。您认为他们为什么将其命名为“调试堆管理器”?

【讨论】:

  • 谢谢,这回答了我关于测试在 Release 中不起作用的问题。尽管如此,我仍然尝试制作 Debug 配置的副本,但未成功。我想我可以将您的答案标记为解决方案,并就为什么/如何不起作用提出单独的问题,因为我将无法以任何其他方式设置测试 - 调试必须能够实际运行可执行代码。
  • @Michaela 尝试生成一个不适合您的最小示例单元测试。编译的东西。在这个过程中你很有可能找到解决方案。
  • 我所有的其他单元测试都有效。 (通过或失败)。他们都编译。他们给出了正确的预期结果。唯一不起作用的是创建调试配置,这将产生内存泄漏。请看上面的例子。该测试不应该通过。确实如此。
  • @Michaela By boost.org/doc/libs/1_40_0/libs/test/doc/html/execution-monitor/… 你只需要使用--detect_memory_leak=yes 运行它。它并没有说它应该是调试版本,但根据我的经验,它应该是。如果这仍然对您不起作用,请在提升讨论组中提问boost.org/community/groups.html也许那里的人可以进一步帮助您。
  • 对不起,我没有表达清楚。在 DEBUG 中,测试失败。但我无法创建调试配置。所以,我确实问了一个单独的问题。 stackoverflow.com/questions/12865484/…我还没有得到答案,我还在努力解决。这不是一个提升或单元测试问题,它实际上是一个 Visual Studio 问题。谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-01-12
  • 2016-06-23
  • 1970-01-01
  • 2022-06-27
  • 2020-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多