Как создать фиктивный объект без класса интерфейса в AMOP? - PullRequest
0 голосов
/ 21 октября 2010

Я только начинаю тестовую разработку с фиктивными объектами.Я могу проделать длинный путь с UnitTest ++, но теперь я хочу попытаться свести к минимуму ввод текста и пытаюсь использовать макет AMOP для создания макетов.

AMOP состояния:

Основные различия между AMOP и другими библиотеками фиктивных объектов в том, что пользователям НЕ нужно реализовывать интерфейс объекта,макет ...

Однако я не могу понять это.Страница основного использования по-прежнему показывает класс IInterface.Кто-нибудь может сделать это без использования класса интерфейса?

Ответы [ 2 ]

2 голосов
/ 21 октября 2010

Для того, что я видел в документации, ему фактически не нужен фиктивный объект для реализации какого-либо интерфейса. Поддельный объект создается на основе интерфейса исходного объекта, но не по наследству, а как параметр класса:

TMockObject<IInterface> mock;

Здесь нет наследования, и TMockObject не привязывается ни к какому интерфейсу посредством наследования. Затем добавляем имитирующие методы, которые будут реализованы имитирующим объектом:

mock.Method(&IInterface::SimpleFunction);
mock.Method(&IInterface::SimpleFunctionWithAlotParams);

((IInterface*)mock)->SimpleFunction();
((IInterface*)mock)->SimpleFunctionWithAlotParams(0, 0, 0, 0, std::string());

Опять же, объект mock фактически не наследует интерфейс. Он может переопределить оператор преобразования в IInterface* (он вернет внутренний IInterface объект).

Я не вижу много преимуществ в не наследовании интерфейса, но в любом случае. Я бы предпочел некоторый шаблон в качестве функции-члена TMockObject, чтобы придать большее значение этому уродливому приведению (не проверено, просто идея):

template <typename I>
I* as(void)
{
    return m.internal_interface_pointer_;
}

чтобы вы могли написать что-то вроде:

mock.as<IInterface>()->SimpleFunction();

но все же ...

0 голосов
/ 21 октября 2010

Это первый раз, когда я слышу, что фиктивной платформе не нужен интерфейс для создания фиктивных объектов.Любой другой делает.Должна быть ошибка в документации.

...