#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可以很容易地扩展到失败测试。对于未来的读者,我包括我的解决方案:
#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吧
MY_TEST_CASE(test)
{
// various
// tests
// .
// .
// .
}如果堆内存泄漏,单元测试将报告错误并失败。
发布于 2015-05-16 08:05:07
Boost Test是一个单元测试框架。
泄漏检测不是一个核心功能。
文件上说:
内存泄漏检测 执行监视器提供了有限的能力来检测程序执行过程中的内存泄漏,并中断对特定内存分配顺序号的程序执行(在程序中首先分配内存,2秒等等)。 不幸的是,这个特性目前只为微软的编译器系列(以及英特尔,如果它使用Microsoft运行时库)实现。 而且,它不能在监视器的每个实例中进行调优,只能在整个程序执行完成后在全局触发和报告。在未来,这种情况应该得到改善。
https://stackoverflow.com/questions/30271889
复制相似问题