Google Mock класс, кажется, не реализует - PullRequest
0 голосов
/ 17 мая 2018

Я новичок в Google Mock и пытаюсь смоделировать интерфейс, но получаю ошибку компоновщика с неопределенными символами для архитектуры x86_64

Вот мой упрощенный код:

У меня есть следующее в .h файле:

namespace Mynamespace
{    
    class IMyInterface
    {
    public:
        virtual ~ IMyInterface() {};

        virtual void myFunction() = 0;

    };
}

это в другом .h файле:

#include <gmock/gmock.h>
#include <IMyInterface.h>

namespace testing
{
    class MyClassMock : public IMyInterface
    {
    public:
        ~ MyClassMock();
        MyClassMock(int, int, int);

        MOCK_METHOD0(myFunction, void());
    };
}

и это в моем файле теста .cpp:

#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <IMyInterface.h>

namespace testing
{
    TEST(MyClassMock, myFunction)
    {
        MyClassMock mcm(0,0,0);
    }
}

У вас есть идея, что я делаю не так? Любая помощь будет очень ценится!

ура, Simon

EDIT:

К сожалению, макет все еще не работает. После того, как я добавил реализацию следующим образом:

namespace testing
{
    MyClassMock:: MyClassMock(int a, int b, int c)
    {
    }

    MyClassMock::~ MyClassMock()
    {
    }
}

"myFunction" не будет вызываться, когда я делаю

#include "MyClassMock.h"
#include <gmock/gmock.h>
#include <gtest/gtest.h>
using ::testing::AtLeast;
using namespace testing;

    TEST(MyClassTest, canCallFunction)
    {
        MyClassMock mock(0,0,0);
        EXPECT_CALL(mock, myFunction())
            .Times(AtLeast(1));
    }

возвращение: EXPECT_CALL (mock, myFunction ()) Ожидается: будет вызван хотя бы один раз Актуально: никогда не звонил - неудовлетворен и активен

1 Ответ

0 голосов
/ 17 мая 2018

Вы должны предоставить реализации для MyClassMock::MyClassMock(int, int, int) и MyClassMock::~MyClassMock().


С другой стороны, вы должны использовать "" вместо <>, когда вы #include свои собственные заголовки,Например, #include "IMyInterface.h", а не #include <IMyInterface.h>.Таким образом, компилятор будет искать в текущем каталоге, прежде чем системный путь включения.

...