2017-04-03 49 views
0

我有一些代碼,我想測試。如果錯誤參數通過,我可以訪問超出範圍的矢量。我想測試這種情況。是否可以使用CppUnitTestFramework來測試此代碼?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 */ 

回答

1

如果你想測試一些東西,那就意味着你期待某種可預測的行爲。使用vector :: operator []來訪問超出範圍的項目會導致未定義的行爲。在調試MS VS構建的情況下,你可能會得到一個斷言,但是在Release中可能會發生任何事情。所以測試運算符[]是毫無意義的,實際上開發人員有責任確保傳遞的索引值是正確的。但也有矢量::在()方法拋出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); 
}