Boost Unit testing memory reuse causing tests that should fail to pass
- by Knyphe
We have started using the boost unit testing library for a large existing code base, and I have run into some trouble with unit tests incorrectly passing, seemingly due to the reuse of memory on the stack.
Here is my situation:
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_default)
{
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);
}
The first test passed correctly, initializing all the variables.
The constructor in the second unit test did not correctly set EntityType or DataPosition, but the unit test passed. I was able to get it to fail by placing some variables on the stack in the second test, like so:
BOOST_AUTO_TEST_CASE(test_select_base_instantiation_default)
{
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);
}
If there is only one int, only the dataPos CHECK_EQUAL fails, but if there are two, both EntityType and DataPos fail, so it seems pretty clear that this is an issue with the variables being created on the same stack memory or some such.
Is there a good way to clear the memory between each unit test, or am I potentially using the library incorrectly or writing bad tests? Any help would be appreciated.