【发布时间】:2020-03-04 07:52:25
【问题描述】:
所以我正在尝试学习如何编写单元测试,但我偶然发现了这个问题,我不明白如何创建模拟对象。这是我的例子: 我有这门课:
class FooChild
{
public:
void doThis();
bool doThat(int n, double x);
};
这是我要测试的另一个类中的方法:
#include "FooFighter.h"
#include "FooChild.h"
void FooFighter::doSomething()
{
FooChild fooChild;
fooChild.doThis();
fooChild.doThat(4, 5);
}
我想测试它是否调用了该方法以及调用了多少次。 谷歌模拟纪录片说,只有具有虚拟方法的抽象类才能被模拟。这就是为什么我尝试创建 FooChild 的父类,如下所示:
class Foo
{
public:
virtual void doThis() = 0;
virtual bool doThat(int n, double x) = 0;
};
然后像这样创建一个 Foo 的模拟类:
#include "gmock/gmock.h"
class MockFoo : public Foo
{
public:
MOCK_METHOD(void, doThis, (), (override));
MOCK_METHOD(bool, doThat, (int n, double x), (override));
};
然后我尝试为 doSomething 编写测试:
TEST_F(FooFighterTest, doSomethingTest)
{
MockFoo mock_foo
mock_foo.doThis()
.Times(1);
}
显然这不起作用,我感觉我完全误解了 mock 的工作原理,但我似乎无法找到一个关于如何创建 mock 的简单明了的解释。任何帮助或建议都会很棒。此外,我关于如何测试这样的 void 函数的方法可能是完全错误的,因此任何关于如何测试不返回任何内容的函数的建议也会很棒。
【问题讨论】:
标签: c++ unit-testing googletest googlemock