我正在尝试使用谷歌测试中可用的类型化测试概念。这个概念的描述符合我打算做的事情,但我无法完全理解。我想测试实现接口(interface)的结构,因为它们曾经完全不同,所以需要使用不同的值/实例对其进行初始化。
简单的我的代码如下
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
}
}
我想用不同的实例/值测试 s1 和 s2。测试应如下所示:
template <typename T>
int testSerialzable(T& t)
{
sObj obj = t.pack();
T temp;
TEST_EQ(temp.unpack(obj), t);
}
有人可以告诉我这是否可行以及如何实现吗? 非常感谢
最佳答案
我终于明白了。对于我上面的例子。它将像:
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());
关于c++ - 如何使用谷歌测试测试实现接口(interface)的不同类/结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36115181/