如何使用指针参数模拟方法

时间:2014-06-13 06:37:53

标签: c++ unit-testing boost mocking turtle-mock

是否可以模拟检索指针(或引用)作为参数并更改指向对象的方法?

我使用海龟库 - http://turtle.sourceforge.net/ - > Boost的C ++模拟对象库。 (我知道它不是流行的库,但在其他库中可能类似)。

例如:我需要模拟方法:

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

Next SUT在代码中使用x值:(

在expactations中,我可以设置我的模拟返回的内容。但是如何修改参数?

怎么做?

2 个答案:

答案 0 :(得分:3)

看一下调用并返回操作: 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 );

希望这有帮助。

答案 1 :(得分:0)

Fake-It是一个简单的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;