2

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

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

例如:我需要将方法模拟为:

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

下一个 SUT 在代码中使用 x 值:(

在expectations我可以设置我的模拟返回什么。但是如何修改论点呢?

怎么做?

4

2 回答 2

4

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

希望这可以帮助。

于 2014-08-04T14:54:31.027 回答
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; 
于 2014-06-14T04:43:28.070 回答