您如何使用gMock创建Mock对象?

问题描述 投票:1回答:1

因此,我试图学习如何编写单元测试,但我偶然发现了这个问题,我不知道如何创建模拟对象。这是我的示例:我有这个课:

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);
}

我想测试事物是否调用了该方法以及执行了多少次。Google模拟纪录片说,只有带有虚拟方法的Abstract类才能被模拟。这就是为什么我尝试创建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);
}

显然,这是行不通的,我有种感觉,我完全误解了模拟的工作原理,但是我似乎无法找到关于如何创建模拟的简单明了的解释。任何帮助或建议都很好。同样,我关于如何测试void函数的方法可能是完全错误的,因此,有关如何测试不返回任何内容的函数的任何建议也都很好。

c++ unit-testing googletest googlemock
1个回答
0
投票

除非您没有将它们放在这里,否则您会丢失很多东西。慢慢阅读googletests的文档,尤其是mocks的文档。这就是我通常定义模拟的方式:

#include <gmock/gmock.h>
#include "Foo.hpp"

class MockFoo : public Foo {
 public:
    MOCK_METHOD0(doThis, void());
    MOCK_METHOD2(doThat, bool(int n, double x));
};

您需要在表达式MOCK_METHOD之后写出方法的参数数量,然后是返回类型,并在括号之间输入参数类型。如果您不想为此担心,请使用库中的this nice generator

然后在测试本身中定义模拟的行为,这就是它的要点,您可以为所有测试做一个通用定义,或对其中的某些测试进行更改以使其工作不同。

我认为写一个完整的示例没有意义,因为您有in the tutorials really good and simple ones,所以请检查一下。

© www.soinside.com 2019 - 2024. All rights reserved.