2014-06-11 2 views
3

사용자 정의 형식 값을 반환하는 함수를 테스트하고 싶습니다. EXPECT_EQ, EXPECT_FLOAT_EQ 등으로 기본 int, float, double 등을 테스트 할 수 있지만 사용자 정의 유형은 테스트 할 수 없다는 것을 알고있었습니다. 어떤 단서?사용자 정의 형식에 EXPECT_EQ를 사용하는 방법

+1

당신은 사용자 정의 유형 값에 대한 == 연산자를 대체 할 수 있습니다. – Schoentoon

답변

3

뭔가를 확인 할 수있는 방법이 있어야합니다.


가) 반환 유형은 그것의 값을 확인 할 수있는 데이터 구조는 멤버 변수 것입니다 :

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); 
+0

나는 당신이 'operator =='를 의미한다고 생각한다. – NicholasM

+0

@ NicholasM 네, 맞습니다. –

2

무시 == 연산자 . :) 테스트 부분에

class Object 
{ 
public: 
    bool operator==(const Object& other) const 
    { 
     return (this->member == other.member); // Modify this depending on the equality criteria 
    } 
private: 
    int member; 
} 

: 그냥 (val1과 ==을 val2) 같은 것을 할 것입니다 방법을보고

Object a, b; 
EXPECT_EQ(a, b); // Should work 
관련 문제