我有2节课。
class SomeClass
{
public:
int SomeFunction()
{
return 5;
}
};
class AnotherClass
{
public:
int AnotherFunction(SomeClass obj)
{
return obj.SomeFunction();
}
};
我为SomeClass做了一个模拟类。
class MockSomeClass : public SomeClass
{
public:
MOCK_METHOD0(SomeFunction, int());
};
现在我想在单元测试中,当我调用AnotherClass.AnotherFunction时,我得到了我自己选择的结果。 AnotherFunction使用SomeClass.SomeFunction()的函数。我嘲笑了SomeClass。并且我已经设置了当模拟对象的函数调用它时可以调整10.但是当我运行单元测试时它返回5(原始函数)。我该怎么办。以下是我写的单元测试。
[TestMethod]
void TestMethod1()
{
MockSomeClass mock;
int expected = 10;
ON_CALL(mock, SomeFunction()).WillByDefault(Return(expected));
AnotherClass realClass;
int actual = realClass.AnotherFunction(mock);
Assert::AreEqual(expected, actual);
};
我正在使用visual studio 2008和gmock 1.6.0。我在做什么是错的。在realClass.AnotherFunction上我想要mock.omeFunction()的模拟输出。
答案 0 :(得分:3)
问题是SomeClass :: SomeFunction(...)不是虚拟的,使它成为虚拟的,它会起作用。
<强>更新强>
还有一个导致它失败的基本错误,即
的方法签名int AnotherFunction(SomeClass obj)
创建一个新的SomeClass对象实例,它将导致调用正常的SomeFunction,你应该将对mock的类的引用作为参数传递。
int AnotherFunction(SomeClass* obj)
并使用
调用它int actual = realClass.AnotherFunction(&mock);