Google Mock не сообщает меньше ожидаемых звонков

Я написал тест Google (с помощью Google Mock). Вот соответствующий код:

MockObj * obj = new MockObj ();
MockDI * mock_di = new DI();
MockDIPtr mock_di_ptr(mock_di); // boost shared ptr
Data data; // sort of on array
data.append(1); data.append(2); // Add two entries
EXPECT_CALL(*obj, get_di_ptr()).WillOnce(Return(mock_di_ptr));
EXPECT_CALL(*mock_di_ptr, get_data(_,_)).WillOnce(SetArgReferee<1>(data));
EXPECT_CALL(*obj , enqueue(_)).Times(2);

Фактическая реализация:

di_ptr->get_data(int, data); // data is updated via reference
for (int i = 0; i < data.size(); ++i)
{
enqueue(data[i]);
}

В принципе, enqueue() должен вызываться один раз для каждой записи в данных. Кроме того, издевательства — это нормальные издевательства (не строгие и т. Д.)

Этот тест, как и ожидалось, проходит, когда я проверяю Times(2),

Этот тест, как и ожидалось, не проходит, когда я проверяю Times(0) или же Times(1),

НО, этот тест проходит, когда я проверяю Times(3)!

Зачем? Что я должен сделать, чтобы обнаружить это поведение?

0

Решение

MockDI * mock_di = new DI(); наверное стоит прочитать MockDI * mock_di = new MockDI(); провести линию EXPECT_CALL(*mock_di_ptr, get_data(_,_)).WillOnce(SetArgReferee<1>(data)); Работа.

aleguna сделал хорошую мысль. Следующий упрощенный эксперимент дает ошибку Actual function call count doesn't match EXPECT_CALL(mock, mockMe(_))..., Я предлагаю отладить тестируемый метод и проверить data.size() после di_ptr->get_data(), Затем установите точку останова в Data::append() и посмотрим, кто добавит больше элементов.

#include "gtest\gtest.h"#include "gmock\gmock.h"
using ::testing::_;

class Dependency
{
public:
virtual ~Dependency() {}

virtual void mockMe(int i);
};

void Dependency::mockMe(int i)
{
}class MockDependency : public Dependency
{
public:
MOCK_METHOD1(mockMe, void (int i));
};class Cut
{
public:
void testMe(Dependency& dependency);
};

void Cut::testMe(Dependency& dependency)
{
for (int i=0; i<2; ++i)
{
dependency.mockMe(i);
}
}TEST(Experiment, VerifyExactCallCount)
{
MockDependency mock = MockDependency();
Cut cut;

EXPECT_CALL(mock, mockMe(_)).Times(3);

cut.testMe(mock);
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector