#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
// .
// .
// .
}
如果任何堆内存泄漏,您的单元测试将报告错误并失败。
答案 0 :(得分:0)
Boost Test是一个单元测试框架。
泄漏检测不是核心功能。
文档说:
Memory leaks detection
执行监视器提供有限能力,用于在程序执行期间检测内存泄漏,并在特定内存分配顺序号上中断程序执行(1 - 程序中第一次分配内存,2秒等等)。
很遗憾目前,此功能仅适用于Microsoft系列编译器(以及英特尔,如果它使用Microsoft C运行时库)。
此外,它无法针对每个监视器实例进行调整,并且仅在全局程序执行完成后全局触发并报告。在未来,这应该得到改善。