2016-03-20 17 views
2

Yazılı test konseptini google testinde kullanmaya çalışıyorum. Bu kavramın açıklaması yapmak istediğimle uyuşuyor, ama tamamen anlayamıyorum. Bir arabirimi uygulayan yapıları test etmek istiyorum, çünkü bunlar tamamen farklı olduklarından, farklı değerler/örnekler ile başlatılmaları gerekiyor.Google testini kullanarak bir arayüz uygulayan farklı sınıflar/yapılar nasıl test edilir?

struct Serializable 
{ 
    virtual sObj serialize() = 0; 
    virtual void unserialize(sObj) = 0; 
}; 

struct s1 : serializable 
{ 
    int attrI1; 
    int attrI2; 
    sObj serialize() 
    { 
    //serialize an instance of this struct 
    } 
    void unserialize(sObj) 
    { 
    //unserialize data to instance of this struct 
    } 
} 

struct s2 : serializable 
{ 
    char attrC; 
    void serialize() 
    { 
    //serialize an instance of this struct 
    } 
    sObj unserialize() 
    { 
    //unserialize data to instance of this struct 
    } 
} 

aşağıdaki Ve farklı örnekleri/değerlerle s1 ve s2 test etmek istediğiniz kadar

Basitçe benim kodudur. Test şöyle olmalıdır:

template <typename T> 
int testSerialzable(T& t) 
{ 
    sObj obj = t.pack(); 

    T temp; 
    TEST_EQ(temp.unpack(obj), t); 
} 

Birisi bana bunun nasıl yapılacağını ve nasıl yapılacağını söyler misiniz? Çok teşekkürler şimdiden

cevap

1

Sonunda anladım. Yukarıda sahip olduğum örnek için.

template<class T> 
struct TestSerializable : public ::testing::Test 
{ 
    static T serializedType; 
}; 

TYPED_TEST_CASE_P(TestSerializable); 

TYPED_TEST_P(TestSerializable, serializationTest) 
{ 
    sObj obj = t.serialize(); 

    TypeParam temp; 
    ASSERT_EQ(temp.unserialize(obj), t); 
} 

REGISTER_TYPED_TEST_CASE_P(TestSerializable, serializationTest); 


typedef ::testing::Types<s1, s2> MyTypes; 
INSTANTIATE_TYPED_TEST_CASE_P(MySerialiInstantiation, TestSerializable, MyTypes); 


template<> s1 TestSerializable<s1>::serializedType(/*instance of s1 with proper values*/s1()); 
template<> s2 TestSerializable<s2>::serializedType(/*instance of s1 with proper values*/s2()); 
-2

Bir arabirimin farklı uygulamalarını test etmek için value-parameterized tests'u kullanmak daha uygun. Google Test’in sample7, bunu nasıl yapacağını gösterir.

+0

Farklı türden olan türleri. Test edilen türün geçici bir örneğini oluşturmam gerekiyor, bu yüzden değer parametreli testleri kullanamıyorum. – Mass