2017-04-03 7 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 빌드의 경우 어설 션을 얻을 수 있지만 릴리스 빌드에서는 아무 것도 발생할 수 없습니다. 그래서 operator []를 테스트하는 것은 무의미합니다. 실제로 전달 된 인덱스 값이 올바른지 개발자가 확인해야합니다. 그러나 벡터 :() 메소드에서 만약 당신이처럼 테스트 할 수 있도록 전달 된 인덱스가 무효 인 경우 out_of_range 예외를 throw도있다 :

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); 
}