Как смоделировать метод с указателем аргумента

Можно ли смоделировать метод, который получает указатель (или ссылку) в качестве аргумента и изменить указанный объект?

Я использую библиотеку черепах — http://turtle.sourceforge.net/ -> C ++ библиотека макетов объектов для Boost. (Я знаю, что это не популярная библиотека, но она может быть похожа в других библиотеках).

Например: мне нужно смоделировать метод как:

int f(int* x)
{
*x = new_value;
return 0;
}

Следующая SUT использует значение x в коде 🙁

В объяснениях я могу установить, что возвращает мой макет. Но как насчет измененного аргумента?

Как это сделать?

2

Решение

Посмотрите на звонки и ответные действия:
http://turtle.sourceforge.net/turtle/reference.html#turtle.reference.expectation.actions

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

int function( int* x )
{
*x = whatever;
return 0;
}

MOCK_EXPECT(mock->f).calls( &function );

Надеюсь это поможет.

3

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

Притворяться это простая фреймворк для C ++. Он поддерживает как GCC, так и MS Visual C ++.
Вот как вы заглушаете метод и изменяете указанный объект с помощью FakeIt:

struct SomeClass {
virtual int foo(int * x) = 0;
};

Mock<SomeClass> mock;
When(Method(mock,foo)).AlwaysDo([](int * x) { (*x)++; return 0;});
SomeClass &obj = mock.get();

int num = 0;
ASSERT_EQUAL(0, obj.foo(&num)); // foo should return 0;
ASSERT_EQUAL(1, num);           // num should be 1 after one call to foo;
0

По вопросам рекламы [email protected]