我是新用户gmock
。我不知道如何使用gmock
这个类来模拟它的实例作为其他类中的类成员。代码如下所示:
classs B
{
B_fun();
};
class A
{
B b;
A_fun()
{
if( b.B_fun() === XXX )
{
doXXXXX...
}
}
现在,我想用来gmock
模拟B
,然后mockB
在A
UnitTest 中使用。你能告诉我怎么做吗?谢谢!
我是新用户gmock
。我不知道如何使用gmock
这个类来模拟它的实例作为其他类中的类成员。代码如下所示:
classs B
{
B_fun();
};
class A
{
B b;
A_fun()
{
if( b.B_fun() === XXX )
{
doXXXXX...
}
}
现在,我想用来gmock
模拟B
,然后mockB
在A
UnitTest 中使用。你能告诉我怎么做吗?谢谢!
您可以将 B 类模拟为:
class MockB: public class B
{
MockMethod0(B_func, void())
};
然后使用:
MockB mockb;
并假设您的 A 类的构造函数之一是:
A(B b_)b(b_){}
因此,您可以通过以下方式使模拟功能可用:
A test_a = A(mockb);
EXPECT_CALL(...)
您可以使用工厂方法(这与工厂模式不同)。
对于您的情况,这是一个示例代码:
class B
{
B_fun();
};
class A
{
A()
{
b = CreateB();
}
A_fun()
{
if( b->B_fun() === XXX )
{
doXXXXX...
}
}
private:
virtual B* CreateB()
{
return new B();
}
B* b;
}
所以在这里你有一个虚拟的 CreateB 方法。
现在创建一个 MockA 类并仅模拟此方法(CreateB)。
模拟方法应该返回一个 MockB 类实例。这可以通过在测试夹具中设置模拟方法(CreateB)来返回 MockB 实例来完成。
现在根据需要对 MockB 实例寄予期望。
在实际中:
class MockA : public A
{
public:
virtual ~MockA() {}
MOCK_METHOD1(CreateB, B*());
};
TEST_F(TestA, TestSomething)
{
MockB* b(new MockB()); // mock that will be used
MockA a; // class under test, factory method(s) mocked
// setup mocks
EXPECT_CALL( a, CreateB()).Times(Exactly(1)).WillOnce(Return(b));
EXPECT_CALL(*b, SomeMethod()).Times(Exactly(1));
// execute test
a.A_fun(3u);
}