如何将EXPECT_EQ用于用户定义的类型

时间:2014-06-11 12:08:56

标签: c++ googletest

我想测试一个返回一些用户定义类型值的函数。我知道我可以使用EXPECT_EQEXPECT_FLOAT_EQ等测试基本的int,float,double等,但不能用于用户定义的类型。任何线索?

2 个答案:

答案 0 :(得分:4)

必须有某种方法来检查。


a)返回类型是一种数据结构,您可以在其中检查其成员变量的值:

struct A {
  int v1;
  float v2;
  char v4;
};

然后使用EXPECT_EQEXPECT_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 );

答案 1 :(得分:3)

覆盖==运算符。 :)

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