gpt4 book ai didi

c++ - Boost 单元测试内存重用导致本应无法通过的测试

转载 作者:搜寻专家 更新时间:2023-10-31 00:48:32 25 4
gpt4 key购买 nike

我们已经开始对现有的大型代码库使用 boost 单元测试库,但我遇到了一些单元测试错误通过的问题,这似乎是由于堆栈上的内存重用所致。

这是我的情况:

BOOST_AUTO_TEST_CASE(test_select_base_instantiation_default)  
{
SelectBase selectBase();
BOOST_CHECK_EQUAL( selectBase.getSelectType(), false);
BOOST_CHECK_EQUAL( selectBase.getTypeName(_T(""));
BOOST_CHECK_EQUAL( selectBase.getEntityType(), -1);
BOOST_CHECK_EQUAL( selectBase.getDataPos(), -1);
}

BOOST_AUTO_TEST_CASE(test_select_base_instantiation_parameterized)
{
SelectBase selectBase(true, _T("abc"));
BOOST_CHECK_EQUAL( selectBase.getSelectType(), false);
BOOST_CHECK_EQUAL( selectBase.getTypeName(_T("abc"));
BOOST_CHECK_EQUAL( selectBase.getEntityType(), -1);
BOOST_CHECK_EQUAL( selectBase.getDataPos(), -1);
}

第一个测试正确通过,初始化所有变量。
第二次单元测试中的构造函数没有正确设置EntityType或DataPosition,但是单元测试通过了。通过在第二个测试中将一些变量放在堆栈上,我能够让它失败,如下所示:

BOOST_AUTO_TEST_CASE(test_select_base_instantiation_parameterized)  
{
int a, b;
SelectBase selectBase(true, _T("abc"));
BOOST_CHECK_EQUAL( selectBase.getSelectType(), false);
BOOST_CHECK_EQUAL( selectBase.getTypeName(_T("abc"));
BOOST_CHECK_EQUAL( selectBase.getEntityType(), -1);
BOOST_CHECK_EQUAL( selectBase.getDataPos(), -1);
}

如果只有一个 int,只有 EntityType CHECK_EQUAL 失败,但如果有两个,EntityType 和 DataPos 都失败,所以很明显这是在同一堆栈内存或某些堆栈内存上创建的变量的问题这样的。

是否有清除每个单元测试之间内存的好方法,或者我是否可能错误地使用了库或编写了错误的测试?任何帮助将不胜感激。

更新:
Select base 是一个简单的类,只有 bool、int 和 CString 成员变量。它是处理更复杂实现的状态的基类,因此它不访问任何全局变量或全局状态。

我需要的是一种将调用之间的内存设置为类似 0xdeadf00d 的方法,这样如果一个成员变量未初始化,单元测试就可以捕获它。否则只有第一个单元测试才有用。

我更新到 boost 1.41,但问题没有解决。它确实在某些测试用例中对问题产生了一定影响,但并未达到所有测试都会正常失败的程度。

最佳答案

不要将测试用例名称重复用于不同的测试。

相反,可以这样调用它们:

test_select_base_instantiation_default_1

test_select_base_instantiation_default_2

关于c++ - Boost 单元测试内存重用导致本应无法通过的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2547988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com