Как я могу вызвать мой ложный метод два раза с двумя разными значениями аргумента - PullRequest
0 голосов
/ 10 ноября 2018

Предположим, мне нужно протестировать фиктивный метод GetSegment с exclusive value 0 и 1 (два раза).

EXPECT_CALL(*mock.get(), GetSegment(refrenceId, _, _, _)).
WillOnce(DoAll(SetArgReferee<1>(numSegment), SetArgPointee<2>(points), SetArgPointee<3>(**exclusive**)));

Спасибо

1 Ответ

0 голосов
/ 14 ноября 2018

Просто сделайте несколько WillOnce - один за другим.

Как:

EXPECT_CALL(*mock.get(), GetSegment(refrenceId, _, _, _))
   .WillOnce(DoAll(SetArgReferee<1>(numSegment), SetArgPointee<2>(points), SetArgPointee<3>(0))).
   .WillOnce(DoAll(SetArgReferee<1>(numSegment), SetArgPointee<2>(points), SetArgPointee<3>(1)));

Вы можете прочитать в doc , что WillOnce можно использовать несколько раз в одном EXPECT_CALL:

EXPECT_CALL (mock_object, метод (сопоставители)) .WillOnce (действие) *

Упрощенный пример, который работает:

class MockMM
{
public:
    MOCK_METHOD4(GetSegment, void(int refrenceId, int, int, int* a));
};

TEST(A, A)
{
    MockMM mock;
    EXPECT_CALL(mock, GetSegment(1, _, _, _))
            .WillOnce(SetArgPointee<3>(0))
            .WillOnce(SetArgPointee<3>(1));

    int a;
    int b;
    mock.GetSegment(1, 1, 0, &a);
    mock.GetSegment(1, 0, 1, &b);
    ASSERT_EQ(0, a);
    ASSERT_EQ(1, b);

}

Вы также можете использовать последовательности :

Когда у вас длинная цепочка последовательных ожиданий, легче указать порядок, используя последовательности, которые не требуют, чтобы вы дали у каждого ожидания в цепочке свое имя. Все ожидаемые звонки в та же последовательность должна происходить в указанном порядке.

using ::testing::Sequence;
Sequence s1, s2;
...
EXPECT_CALL(foo, Reset())
    .InSequence(s1, s2)
    .WillOnce(Return(true));
EXPECT_CALL(foo, GetSize())
    .InSequence(s1)
    .WillOnce(Return(1));
EXPECT_CALL(foo, Describe(A<const char*>()))
    .InSequence(s2)
    .WillOnce(Return("dummy"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...