Дразнить стороннюю библиотеку, используя fakeit - PullRequest
1 голос
/ 20 января 2020

Я пишу свою собственную библиотеку / класс, который использует стороннюю библиотеку. Я хочу написать тесты для своего собственного класса и издеваться над сторонней библиотекой. В одном из тестов я хочу убедиться, что при вызове функции из моего класса также начинает вызываться и другая функция из сторонней библиотеки. Я думаю, что FakeIt библиотека будет хорошей идеей для проверки этого.

Это пример моего кода тестирования:

#include "MyTest.h"
#include "fakeit.hpp"

using namespace fakeit;

int main() {
    MyTest dt;
    Mock<ExternLib> mock;
    Fake(Method(mock, someFunc));
    ExternLib& el = mock.get();
    dt.begin();
    Verify(Method(mock, someFunc));
    return 0;
}

Когда это выполняется, хотя, он выдает fakeit::SequenceVerificationException с

Expected pattern: mock.someFunc( Any arguments )
Expected matches: at least 1
Actual matches  : 0
Actual sequence : total of 0 actual invocations.

Так ясно, что макет не сработал, и его метод не был вызван. Любая идея, как я могу издеваться над этим классом и проверять, что его метод вызывается?

MyTest. cpp просто простой тест и будет моей полной библиотекой / классом:

#include "MyTest.h"

MyTest::MyTest() {
    _manager = new ExternLib();
}

void MyTest::begin() {
    result = _manager->someFunc();
}

и его заголовочный файл:

#pragma once
#include "Externlib.h"

class MyTest {
    public:
        MyTest();
        virtual void begin();
        int result = 3;
    private:
        ExternLib *_manager;
};

ExternLib - фиктивная версия сторонней библиотеки. Моя реализация реализует основные потребности реального интерфейса, а функции на самом деле ничего не делают. Реализация на самом деле просто для удовлетворения операторов #include Externlib.h.

Это мой Externlib. cpp:

#include "Externlib.h"

ExternLib:: ExternLib() {}

int ExternLib::someFunc() {
    return 5;
}

и файл заголовка:

#pragma once

class ExternLib {
    public:
        ExternLib();
        virtual int someFunc();
};
...