Как проверить равенство двух элементов класса enum с помощью googletest? - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть объект с типом enum в качестве члена.

enum class Color { Blue=1, Green=2, Red=3}; 
struct A {
    int f;
    Color color;
    A(int x, Color c) : f(x), color(c) {}
};

struct B{
     ...
     std::unique_ptr<A> makeObject(size_t index, Color col) {
     ... // other unrelated parsing and verification code
     auto obj = std::make_unique<A>(index, col);
     return obj;
 }
 ...
};

У меня может быть два объекта, таких как:

B b;
auto first = b.makeObject(2, Color::Blue);
auto second = std::make_unique<A>(2, Color::Blue);

и сравните два члена как

 if (first->color == second->color) {...}

Однако, если я напишу тест Google, который имеет что-то вроде

 TEST(StuffTest, makeObjectTest) {
        B stuffObject;
        auto retStuff = stuffObject.makeObject(1, Color::Red);

        auto testStuff = std::make_unique<A>(1, Color::Red);

        EXPECT_EQ(retStuff->f, testStuff->f);
        EXPECT_EQ(retStuff->color, testStuff->color);
    } 

тест не пройден:

Expected equality of these values:
retStuff->color
Which is: 4-byte object <62-01 00-00>
testStuff->color
Which is: 4-byte object <11-01 00-00>
[  FAILED  ]... 

Чего мне не хватать?

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Способ проверки равенства двух перечислимых классов в googletest заключается в использовании EXPECT_EQ().

Этот тест проходит:

TEST(StuffTest, makeObjectTest) {
    auto retStuff = std::make_unique<A>(1, Color::Red);
    auto testStuff = std::make_unique<A>(1, Color::Red);

    EXPECT_EQ(retStuff->f, testStuff->f);
    EXPECT_EQ(retStuff->color, testStuff->color);
}

Некоторый вывод (clang, macOS):

[----------] 1 test from StuffTest
[ RUN      ] StuffTest.makeObjectTest
[       OK ] StuffTest.makeObjectTest (0 ms)
[----------] 1 test from StuffTest (0 ms total)

Проблема должна быть в вызове stuffObject.makeObject(1, Color::Red), как указали другие. Если вам нужна дополнительная помощь, вам нужно показать, что делает эта функция makeObject.

0 голосов
/ 02 сентября 2018

Нет проблем в том, как вы проверяете значения на равенство:

EXPECT_EQ(retStuff->color, testStuff->color);

работает точно так, как ожидается.

Ваша проблема, скорее всего, связана с функцией, которую вы вызываете из класса B

auto retStuff = stuffObject.makeObject(1, Color::Red);

Эта функция не делает то, что вы ожидаете. Вы должны исследовать там, а не спрашивать, работает ли EXPECT_EQ() правильно.

...