我想测试一个返回一些用户定义类型值的函数。我知道我可以使用EXPECT_EQ
,EXPECT_FLOAT_EQ
等测试基本的int,float,double等,但不能测试用户定义的类型。有任何线索吗?
必须有某种检查方法。
a)返回类型是一个数据结构,您可以在其中检查其成员变量的值:
struct A {
int v1;
float v2;
char v4;
};
然后使用EXPECT_EQ
,EXPECT_FLOAT_EQ
和可用的宏:
A a1{ 3, 2.2, 'a' };
A a2{ 4, 2.5, 'b' };
EXPECT_EQ( a1.v1, a2.v2 );
或者甚至检查是否是POD:
EXPECT_TRUE( 0 == std::memcmp( &a1, &a2, sizeof(a1) ) );
b)返回类型已实现operator==
:
bool operator==( const A& lh, const A& rh ) {
return std::make_tuple( lh.v1, lh.v2, lh.v4 ) == std::make_tuple( rh.v1, rh.v2, rh.v4 );
}
然后与EXPECT_EQ
比较:
A a1{ 3, 2.2, 'a' };
A a2{ 4, 2.5, 'b' };
EXPECT_EQ( a1, a2 );
或带有EXPECT_TRUE
:
EXPECT_TRUE( a1 == a2 );
覆盖==运算符。 :)
class Object
{
public:
bool operator==(const Object& other) const
{
return (this->member == other.member); // Modify this depending on the equality criteria
}
private:
int member;
}
在测试部分:
Object a, b;
EXPECT_EQ(a, b); // Should work