2013-06-16 16 views
6

İki vektörü karşılaştırmam gerektiğinde C++ birimindeki test kodunda, beklenen değerleri saklamak için geçici vektör oluşturuyorum.Birim testinde geçici karşılaştırma için C++ 'da adlandırılmamış kapsayıcı oluşturma

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

Bir satır yapabilir miyim? Python'da "[...]" ile bir liste oluşturabilirim.

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

Bir vektör hazırlayıcısı arıyorsanız. [Bu] (http://stackoverflow.com/questions/758118/c-vector-literals-or-something-like-them) yardım eder mi? –

cevap

3

gibi yazmak bekliyorsa sameTwoVectors işlevi, bir vektöre değer, rvalue referansı veya const referansı kabul ettiği sürece. sameTwoVectors sadece basit bir karşılaştırma yaparsa

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

İsteğe bağlı olarak, bunu ortadan kaldırabilir. Sadece EXPECT_TRUE'u aradığınızda kendi yerinde bir karşılaştırma ifadesi kullanın. Bu işlem, örtük dönüştürme kurucusuna güvenmek yerine std::vector<int>'u açıkça belirtmenizdir. Bir kaç karakter daha az ve beklenen sonuç ne kadar açık.

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

Bunun için belirli bir terim olduğunu belirtmek gerekir. Bir başlatıcı listesi yapıcısı vardır. N3485 § 8.5.4/2'ye bakınız. – chris

+0

@chris Teşekkürler, güncellendi. –

İlgili konular