2013-06-16 6 views
6

C++の単体テストコードでは、2つのベクトルを比較する必要があるときに、期待値を格納するために一時的なベクトルを作成します。単体テストで一時的比較のためにC++で無名コンテナを作成する

std::vector<int> expected({5,2,3, 15}); 
EXPECT_TRUE(Util::sameTwoVectors(result, expected)); 

1行にすることはできますか? Pythonでは、私は "[...]"でリストを生成することができます。

sameTwoVectors(members, [5,2,3,15]) 
+0

あなたはベクトルリテラルを探しています。 [this](http://stackoverflow.com/questions/758118/c-vector-literals-or-something-like-them)に回答がありますか? –

答えて

3

ようにそれを記述する場合sameTwoVectors関数が値、rvalue参照またはconst参照によってベクトルを受け入れる限り。 sameTwoVectorsだけの単純な比較を行う場合

namespace Util 
{ 
    bool sameTwoVectors(
     const std::vector<int>& result, 
     const std::vector<int>& expected) 
     { 
      return result == expected; 
     } 
} 


int main() 
{ 
    std::vector<int> result; 

    EXPECT_TRUE(Util::sameTwoVectors(result, {5,2,3,15})); 
} 

必要に応じて、あなたはそれを排除することができます。 EXPECT_TRUEに電話するときは、その代わりに比較式を使用してください。暗黙の変換コンストラクタに頼るのではなく、明示的にstd::vector<int>を指定しなければならないというトレードオフがあります。期待される結果が何であるかを少しはっきりさせていない。

EXPECT_TRUE(result == std::vector<int>({5,2,3,15})); 
+0

それには特定の言葉があることは注目に値する。初期化子リストコンストラクタを持っています。 N3485§8.5.4/ 2を参照のこと。 – chris

+0

@chrisありがとうございました。 –

1

Util::sameTwoVectorsはconst参照を期待またはstd::vectorを使用すると、均一な初期化構文を使用することができstd::initializer_listかかりinitializer-list constructorを含むので、あなたは(C++11サポートを仮定して)ことができるだけの値がその

EXPECT_TRUE(Util::sameTwoVectors(result, std::vector<int>{5, 2, 3, 15})); 
関連する問題