是否可以模拟检索指针(或引用)作为参数并更改指向对象的方法?
我使用海龟库 - http://turtle.sourceforge.net/ - > Boost的C ++模拟对象库。 (我知道它不是流行的库,但在其他库中可能类似)。
例如:我需要模拟方法:
int f(int* x)
{
*x = new_value;
return 0;
}
Next SUT在代码中使用x值:(
在expactations中,我可以设置我的模拟返回的内容。但是如何修改参数?
怎么做?
答案 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;