使用Gmock测试简单函数 - 测试失败(应该通过?)

时间:2017-08-28 16:51:42

标签: googletest gmock

我刚开始使用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。 我看了几个例子,我认为我做了所有的事情,但结果并不是我所期待的。请帮我看看我错在哪里,我怎样才能通过测试。谢谢。

1 个答案:

答案 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进行通信。