GoogleTest не может использовать пользовательский оператор сравнения - PullRequest
4 голосов
/ 18 марта 2012

Я хотел сделать простые тесты для моей структуры Word в Google Test.Чтобы сделать тестовый код проще и короче, я решил написать оператор сравнения (даже если он мне действительно не нужен) и просто использовать ASSERT_EQ, в соответствии с праймером .Даже если все выглядит нормально, я получаю ошибку компилятора:

/* Word.h */
namespace tgs {

struct Word {
    //something here
    Word();
    virtual ~Word();
    bool operator== (Word& rhs);
};
}

/* Word.cpp */
namespace tgs {
bool Word::operator== (Word& rhs){
  return true; //there are actual member comparisons here
}
}


/* TextAreaShould_test.cc */
TEST_F(TextAreaShould, DoSomething) {
  Word w1, w2;

  if(w1 == w2){ //compiles and runs ok
    0;
  }
  ASSERT_EQ(w1, w2); //produces following error
}

ошибка компилятора:

[ 86%] Building CXX object CMakeFiles/tests/TextAreaShould.test.dir/tests/TextAreaShould_test.cc.o
/usr/bin/c++    -I/home/nietaki/zpp/TheGameShow_build -I/home/nietaki/zpp/TheGameShow -I/home/nietaki/zpp/TheGameShow/google_mock/include -I/home/nietaki/zpp/TheGameShow/google_mock/gtest/include -I/usr/local/include   -o CMakeFiles/tests/TextAreaShould.test.dir/tests/TextAreaShould_test.cc.o -c /home/nietaki/zpp/TheGameShow/tests/TextAreaShould_test.cc
In file included from /home/nietaki/zpp/TheGameShow/tests/TextAreaShould_test.cc:8:
/home/nietaki/zpp/TheGameShow/google_mock/gtest/include/gtest/gtest.h: In function ‘testing::AssertionResult testing::internal::CmpHelperEQ(const char*, const char*, const T1&, const T2&) [with T1 = tgs::Word, T2 = tgs::Word]’:
/    home/nietaki/zpp/TheGameShow/google_mock/gtest/include/gtest/gtest.h:1363:   instantiated from ‘static testing::AssertionResult testing::internal::EqHelper<lhs_is_null_literal>::Compare(const char*, const char*, const T1&, const T2&) [with T1 = tgs::Word, T2 = tgs::Word, bool lhs_is_null_literal = false]’
/home/nietaki/zpp/TheGameShow/tests/TextAreaShould_test.cc:112:   instantiated from here
/home/nietaki/zpp/TheGameShow/google_mock/gtest/include/gtest/gtest.h:1326: error: no match for ‘operator==’ in ‘expected == actual’
/home/nietaki/zpp/TheGameShow/renderer/textarea/Word.h:25: note: candidates are: bool tgs::Word::operator==(tgs::Word&)

Я также попытался поместить оператор сравнения вне класса, не как член, ноэто, кажется, не имеет большого значения.Я пытался сделать все согласно Учебнику для начинающих, но, возможно, что-то не так.

1 Ответ

8 голосов
/ 18 марта 2012

Оператор сравнения не меняет ни один из аргументов, поэтому он может быть const, как используется Gooogle Test:

struct Word {

    Word();
    virtual ~Word();
    bool operator== (const Word& rhs) const;
};

... и все работает хорошо.

...