我試圖使用GTEST類型參數,以確保我的課的基本功能。不過,我被困在測試設置中。以下是例子:多態性GTEST類型參數
我有兩個類稱爲CatTest & DogTest,和一個基類叫做AnimalTest,這將考驗貓&狗的所有相似之處:
template <typename T>
class AnimalTest : public ::testing::Test
{
public:
virtual void SetUp()
{
// Do something here so that it will call the correct setup
}
};
TYPED_TEST_P(AnimalTest , HasLegs)
{
ASSERT_EQ(4, this->Legs);
}
REGISTER_TYPED_TEST_CASE_P(AnimalTest , HasLegs);
現在在我的CatTest.cpp,我有聲明下面的宏(這同樣適用於DogTest)
typedef ::testing::Types<Cat> AnimalsTypes;
INSTANTIATE_TYPED_TEST_CASE_P(CatTest, AnimalTest , AnimalsTypes);
class CatTest : public CatSetUp
, public AnimalTest<AnimalsTypes>
{
public:
virtual void SetUp()
{
CatSetUp::SetUp();
}
}
在正常類型參數化試驗例中,HasLegs測試將兩種貓與狗類型運行。 這裏的問題是CatTest有它自己的SetUp(),DogTest()也是這樣。需要執行這些需要初始化Cat對象,以便將其傳遞給類型參數化測試(動物測試)。然而,這些SetUp從來沒有被調用過,實際上甚至DogTest()或CatTest()的構造函數都不會被調用。我認爲類型參數化測試將使用overriden SetUp()調用派生類的相應實例?或者我在這裏錯過了什麼?
您好,感謝@PiotrNycz的objectUnderTest並獲得成功。我被INSTANTIATE_宏弄糊塗了,但當我檢查它的聲明時,它確實只是第一個參數的#prefix。儘管如此,我仍然可以使用與我的CatTest相同的名稱來同時執行共同和個別測試。 (不能upvote,還需要更多的代表去;()。 – mappa
@mappa我很高興幫助。請接受這個答案,我假設它解決了你的問題... – PiotrNycz