2017-04-03 12 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ビルドの場合はアサーションが得られるかもしれませんが、リリースビルドでは何かが起こります。したがって、演算子[]のテストは無意味です。実際には、渡されたインデックス値が正しいことを確認する開発者責任があります。しかし、ベクトル::()メソッドで、あなたはこのようにそれをテストすることができるように渡されたインデックスが無効の場合は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); 
} 
関連する問題