我刚开始使用Gtest / Gmocks,我正在努力尝试一个例子。我有一个简单的类,它有一个成员函数返回一个值(比如3)。我正在尝试模拟此测试并检查返回的结果是否为3.为简单起见,我将所有内容都写在一个文件中:
// Testing.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "gmock\gmock.h"
#include "gtest\gtest.h"
using ::testing::AtLeast;
using namespace std;
class MyClass{
public:
virtual int retValue() { return 3; }
virtual ~MyClass(){}
};
class FakeMyClass : public MyClass
{
public:
MOCK_METHOD0( retValue, int() );
};
TEST(TestForMyClass, TestRetVal)
{
FakeMyClass obj3;
EXPECT_EQ(obj3.retValue(), 3);
}
int _tmain(int argc, _TCHAR* argv[])
{
::testing::InitGoogleMock(&argc, argv);
return RUN_ALL_TESTS();
}
但是我的测试失败了,它说预期的结果是3而我的实际结果是0。 我看了几个例子,我认为我做了所有的事情,但结果并不是我所期待的。请帮我看看我错在哪里,我怎样才能通过测试。谢谢。
答案 0 :(得分:0)
您问题的简单答案是:
你有一个模拟FakeMyClass
的对象。如果重写此方法,则此对象永远不会返回基类的值!!
如果要测试类的简单方法,则不需要模拟。试试你的课程:
class MyClass{
public:
virtual int retValue() { return 3; }
virtual ~MyClass(){}
};
TEST(TestForMyClass, TestRetVal)
{
MyClass obj3;
EXPECT_EQ(obj3.retValue(), 3);
}
嘲笑更多:
测试原则是单独测试。因此,当您的类与另一个对象相关时,您必须模拟此对象。我建议看看一个例子
(例如klick)
在此示例中,Painter
是被测系统。 Painter
与被模拟的Turtle
进行通信。