Я пытаюсь протестировать класс с помощью фреймворка Google и не могу понять, как выполнить мой тест.
Вот мой упрощенный код:
У меня есть интерфейс в файле .h:
namespace Mynamespace
{
class IMyInterface
{
public:
virtual ~ IMyInterface() {};
virtual int myFunction() = 0;
};
}
и мой фиктивный класс, который наследуется от интерфейса:
#include <gmock/gmock.h>
#include <IMyInterface.h>
namespace testing
{
class MyClassMock : public IMyInterface
{
public:
~ MyClassMock();
MyClassMock();
MOCK_METHOD0(myFunction, int());
};
}
с реализацией макета класса:
#include "MyClassMock.h"
namespace testing
{
MyClassMock:: MyClassMock()
{
}
MyClassMock::~ MyClassMock()
{
}
}
мой другой класс принимает объект MyClass в качестве аргумента функции, подобной этой:
#include "MyClass.h"
namespace Mynamespace
{
class AnotherClass
{
public:
AnotherClass();
~ AnotherClass();
void anotherFunction(MyClass&);
};
}
с реализацией:
#include MyClass.h
#include AnotherClass.h
namespace Mynamespace
{
AnotherClass:: AnotherClass()
{
}
AnotherClass::~ AnotherClass()
{
}
AnotherClass::anotherFunction(MyClass& obj_myClass)
{
//does something...
}
}
Затем я хотел бы протестировать функцию AnotherClass, используя макет, подобный следующему:
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "MyClass.h"
#include "MyClassMock.h"
#include "AnotherClass.h"
using namespace testing;
using namespace std;
TEST(DirectivityParameter, CanInstantiate)
{
AnotherClass obj_anotherClass;
MyClassMock mock_myClass;
EXPECT_CALL(mock_myClass, myFunction())
.Times(1)
.WillOnce(Return(0));
obj_anotherClass.anotherFunction(&mock_myClass);
}
Это создает семантическую проблему:
"Неконстантная lvalue-ссылка на тип 'MyClass' не может привязаться к временному объекту типа 'MyClasssMock *'
Я запутался, потому что думал, что цель MyClassMock - эмулировать MyClass, но это сообщение говорит мне об обратном.
Что я делаю не так?
Буду очень признателен за любую помощь!
ура,
Simon