Итак, я пытаюсь научиться писать модульные тесты и наткнулся на проблему, что я не понимаю, как создавать фиктивные объекты. Вот мой пример: у меня есть этот класс:
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 говорится, что только абстрактные классы с виртуальными методами могут быть смоделированы. Вот почему я попытался создать родительский класс 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);
}
Ясно, что это не работает, и у меня есть ощущение, что я совершенно не понял, как работают насмешки, но я просто не могу найти хорошее и простое объяснение того, как создать издевается. Любая помощь или совет будут великолепны. Также мой подход к тестированию таких пустых функций может быть совершенно неверным, поэтому любые советы по тестированию функций, которые ничего не возвращают, были бы также хороши.