Ложные внутренние вызовы функции, тестируемой с помощью googlemock

Я новичок в Google Mock и, основываясь на своем понимании документации и сетевых ресурсов, я не смог найти решение своей проблемы:

У меня есть следующие классы:

class A
{
public:
A() { }
int fun1()
{
//Some code
B b;
x = b.fun2();
//Some other code
}
};
class B
{
public:
B() { }
int fun2()
{
//Some code
y = C::fun3();
//Some code
}
};
class C
{
public:
static int fun3()
{
//Read a file and provide success if a certain pattern is found
}
};

Сейчас я пытаюсь написать тест Google для A :: fun1 (). Но из-за структуры кода (все вызовы осуществляются через объекты, и у меня нет базового класса, с помощью которого я могу инициализировать макет и т. Д., Я не могу успешно смоделировать это.

Может кто-нибудь помочь мне понять, если это издевательство над Google Mock в его нынешнем виде? Обратите внимание, что мне не разрешено изменять исходный код.

0

Решение

Это можно сделать только до тех пор, пока тестируемый класс можно настроить с помощью статических интерфейсов (т. Е. Параметров шаблона). Смотрите здесь для более подробной информации: Насмешливые невиртуальные методы.

Другой альтернативой может быть введение интерфейсов-оболочек в тестируемый класс, которые можно смоделировать как обычно: Альтернатива насмешливым бетонным классам.

Если вы не можете изменить какой-либо код, это невозможно, ИМХО.

ОБНОВИТЬ:
Как долго class B создается внутри A::fun1(), будет трудно издеваться B тем не мение. Он должен быть передан как параметр, таким образом, у вас есть возможность управлять созданием экземпляра в вашем методе тестирования.

Для вас может оказаться жизнеспособным решением подделать среду сборки для тестирования и предоставить объявление и определение для class B это обеспечивает насмешку.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]