Это исправленная / лучше написанная версия вопроса, который я задал ранее сегодня - этот вопрос сейчас удален.
У меня есть проект, в котором я начинаю с Google Mock. Я создал класс, и этот класс вызывает функции в Windows API. Я также создал класс-оболочку с виртуальными функциями, обертывающими Windows API, как описано в Google Mock CheatSheet. Однако я запутался в том, как мне передать оболочку в мой класс, который использует этот объект. Очевидно, что этот объект должен быть полиморфным, поэтому я не могу передать его по значению, заставив меня передать указатель. Это само по себе не является проблемой, но я не понимаю, кто должен владеть указателем на класс, обертывающий API.
Итак ... как мне передать класс-оболочку в реальный класс для облегчения насмешек?
Вот пример того, что я имею в виду:
struct A {
virtual void SomeMethod(int x, int y)
{
::SomeMethod(x, y);
};
};
class Client
{
A * method_;
public:
Client(A * method = new A) : method_(method) {};
void DoSomething()
{
method_->SomeMethod(42, 34);
}
};
struct Mock : public A
{
MOCK_METHOD2(SomeMethod, void(int, int));
};
TEST(MyTest, MyTestWithMock)
{
Mock * mock = new Mock();
EXPECT_CALL(*mock, SomeMethod(42, 34)).Times(1);
Client client(mock); //Should *client* be responsable for deleting mock?
client.DoSomething();
};
ПРИМЕР 2:
struct A {
virtual void SomeMethod(int x, int y)
{
::SomeMethod(x, y);
};
};
class Client
{
A * method_;
public:
Client(A * method) : method_(method) {};
static Client Create()
{
static A;
return Client(&A);
}
void DoSomething()
{
method_->SomeMethod(42, 34);
}
};
struct Mock : public A
{
MOCK_METHOD2(SomeMethod, void(int, int));
};
TEST(MyTest, MyTestWithMock)
{
Mock mock;
EXPECT_CALL(mock, SomeMethod(42, 34)).Times(1);
Client client(&mock);
client.DoSomething();
};