【发布时间】:2016-08-24 15:53:26
【问题描述】:
我正在尝试使用 gtest 类型参数化来确保我的类的基本功能。但是我被困在测试设置中。以下是示例:
我有两个名为 CatTest 和 DogTest 的类,以及一个名为 AnimalTest 的基类,它将测试 Cat 和 Dog 的所有相似性:
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 测试将针对 Cat 和 Dog 类型运行。 这里的问题是 CatTest 有自己的 SetUp(),DogTest() 也有。需要执行这些以初始化 Cat 对象,以便我可以将其传递给类型参数化测试( Animal 测试)。然而,这些 SetUp 从未被调用过,事实上,甚至 DogTest() 或 CatTest() 的构造函数也从未被调用过。我认为类型参数化测试将调用派生类的相应实例并覆盖 SetUp() ?还是我在这里遗漏了什么?
【问题讨论】:
标签: c++ unit-testing testing polymorphism googletest