使用 Gmock 测试简单函数 - 测试失败(应该通过?)
Testing simple function with Gmock - test fails(should pass?)
我刚开始使用 Gtest/Gmocks,我正在为一个例子苦苦挣扎。我有一个简单的 class,它有一个成员函数,returns 一个值(比如 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。
我看了几个例子,我想我做了所有的事情,结果仍然不是我所期望的。请帮我看看我哪里错了,我怎样才能让测试通过。谢谢。
您问题的简单答案是:
您有一个模拟对象 FakeMyClass
。如果重写此方法,此对象将永远 return 基数 class 的值!!
如果要测试 class 的简单方法,则不需要 mock。只需测试您的 class:
class MyClass{
public:
virtual int retValue() { return 3; }
virtual ~MyClass(){}
};
TEST(TestForMyClass, TestRetVal)
{
MyClass obj3;
EXPECT_EQ(obj3.retValue(), 3);
}
再多一点嘲笑:
测试的一个原则是隔离测试。所以,当你的 class 与另一个对象有关系时,你必须模拟这个对象。我建议看一个例子
(例如 klick)。
在此示例中,Painter
是被测系统。 Painter
与被嘲笑的 Turtle
通信。
我刚开始使用 Gtest/Gmocks,我正在为一个例子苦苦挣扎。我有一个简单的 class,它有一个成员函数,returns 一个值(比如 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。 我看了几个例子,我想我做了所有的事情,结果仍然不是我所期望的。请帮我看看我哪里错了,我怎样才能让测试通过。谢谢。
您问题的简单答案是:
您有一个模拟对象 FakeMyClass
。如果重写此方法,此对象将永远 return 基数 class 的值!!
如果要测试 class 的简单方法,则不需要 mock。只需测试您的 class:
class MyClass{
public:
virtual int retValue() { return 3; }
virtual ~MyClass(){}
};
TEST(TestForMyClass, TestRetVal)
{
MyClass obj3;
EXPECT_EQ(obj3.retValue(), 3);
}
再多一点嘲笑:
测试的一个原则是隔离测试。所以,当你的 class 与另一个对象有关系时,你必须模拟这个对象。我建议看一个例子
(例如 klick)。
在此示例中,Painter
是被测系统。 Painter
与被嘲笑的 Turtle
通信。