我有一些我想测试的代码。如果传递了错误的参数,我可以访问超出其范围的向量。我想测试这个条件。是否可以使用CppUnitTestFramework
?
#if _ITERATOR_DEBUG_LEVEL == 2
if (size() <= _Pos)
{ // report error
_DEBUG_ERROR("vector subscript out of range");
_SCL_SECURE_OUT_OF_RANGE;
}
#elif _ITERATOR_DEBUG_LEVEL == 1
_SCL_SECURE_VALIDATE_RANGE(_Pos < size());
#endif /* _ITERATOR_DEBUG_LEVEL */
答案 0 :(得分:1)
如果你想测试某些东西,那就意味着你期望某种可预测的行为。使用vector :: operator []访问超出范围的项目会引爆未定义的行为。在Debug MS VS build的情况下,您可能会得到一个断言,但在Release版本中,任何事情都可能发生。所以测试operator []是没有意义的,实际上开发人员有责任确保传递的索引值是正确的。但是还有vector :: at()方法,如果传递的索引无效,则会抛出out_of_range异常,因此您可以像这样测试它:
TEST_METHOD(VectorOutOfRangeAccess_Test)
{
auto out_of_range_thrown{false};
try
{
::std::vector< int > const values{0, 1, 2};
values.at(3);
}
catch(::std::out_of_range const &)
{
out_of_range_thrown = true;
}
catch(...){}
Assert::IsTrue(out_of_range_thrown);
}