首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boost.Test不将内存泄漏视为失败

Boost.Test不将内存泄漏视为失败
EN

Stack Overflow用户
提问于 2015-05-16 04:39:55
回答 1查看 401关注 0票数 0
代码语言:javascript
复制
#define BOOST_TEST_MODULE test
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_CASE(test)
{
    int * i = new int;
    BOOST_CHECK(i==0);
}

以上测试用例明显失败。内存泄漏也有很好的报道。但是,如果我将测试从i==0更改为i!=0,它就会成功,而且不会出现内存泄漏。

这是一个错误,还是我错过了一些使Boost.Test将内存泄漏视为失败的配置?

编辑

如果内存泄漏,Boost.Test可以很容易地扩展到失败测试。对于未来的读者,我包括我的解决方案:

代码语言:javascript
复制
#define MY_TEST_CASE(name)              \
    void my_test_cases__##name();       \
    BOOST_AUTO_TEST_CASE(name)          \
    {                                   \
        mytests::heap heap_scope;       \
        my_test_cases__##name();        \
        (void)heap_scope;               \
    }                                   \
    void my_test_cases__##name()

namespace mytests
{
    class heap
    {
#   if !defined(NDEBUG) && defined(_MSC_VER)
    public:
        heap()
        {
            _CrtMemCheckpoint(&oldState);
        }

        ~heap()
        {
            _CrtMemState curState, diffState;

            _CrtMemCheckpoint(&curState);

            int leaked_memory = _CrtMemDifference(&diffState,&oldState,&curState);

            BOOST_REQUIRE(leaked_memory==0);
        }

    private:
        _CrtMemState oldState;
#   endif
    };
}

那就用MY_TEST_CASE代替BOOST_AUTO_TEST_CASE

代码语言:javascript
复制
MY_TEST_CASE(test)
{
    // various
    // tests
    // .
    // .
    // .
}

如果堆内存泄漏,单元测试将报告错误并失败。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-16 08:05:07

Boost Test是一个单元测试框架。

泄漏检测不是一个核心功能。

文件上说:

内存泄漏检测 执行监视器提供了有限的能力来检测程序执行过程中的内存泄漏,并中断对特定内存分配顺序号的程序执行(在程序中首先分配内存,2秒等等)。 不幸的是,这个特性目前只为微软的编译器系列(以及英特尔,如果它使用Microsoft运行时库)实现。 而且,它不能在监视器的每个实例中进行调优,只能在整个程序执行完成后在全局触发和报告。在未来,这种情况应该得到改善。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30271889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档