2012-02-13 4 views
12

Я использую gmock для модульное тестирование Код C++. Я не использую gtest framework. Я использую встроенную среду тестирования Visual Studio 2008.Автоматическая генерация макетов для gmock

Теперь моя проблема заключается в том, что мне приходится вручную писать макеты классов для реального класса для модульного теста. Например, если у меня есть класс A с 5 функциями, тогда я должен написать MockAClass с 5 функциями. Есть ли способ, которым эти классы автоматически генерируются.

class AClass 
{ 
public: 
    virtual int AFunction() 
    { 
     return 5; 
    } 
    virtual int AFunctionWithArguments(int x) 
    { 
     return x; 
    } 



class MockAClass : public AClass 
{ 
public: 
    MOCK_METHOD0(AFucntion, int()); 
    MOCK_METHOD1(AFunctionWithArgument, int(int x)); 
}; 

ответ

18

Существует инструмент в комплекте с макетом проекта Google, который поможет вам сделать это. Однако я думаю, что инструмент требует установки python, и я не знаю, насколько хорошо он работает в среде Windows. Я также обнаружил, что сгенерированные файлы иногда нуждаются в небольшой настройке, чтобы работать отлично.

Вот информация из docs:

Совет: Если даже это слишком много работы для вас, вы найдете инструмент gmock_gen.py в Google Mock в сценарии/генератор/каталог (любезность проекта cppclean). Этот инструмент командной строки требует установки Python 2.4. Вы даете ему файл C++ и имя абстрактного класса, определенное в нем, и оно напечатает определение класса mock для . Из-за сложности языка C++ этот скрипт может не всегда работать, но он может быть весьма полезен , когда он это делает. Для получения дополнительной информации прочтите документацию пользователя.

Адрес new localization of this script.

+0

спасибо, я стараюсь использовать это и надеюсь, что это сработает, –

+0

его работа. Благодарю. –

+1

Это определенно работает на Windows. Я на Python 2.7, и все в порядке. Обычные оговорки применяются для ручных настроек ... – rholmes

2

Отказ от ответственности: Я используется для работы на TypeMock

Рассматривали ли вы с помощью другого инструмента?
У Typemock есть инструмент под названием Isolator++, который вам не нужен, чтобы написать «насмешливые классы».

TEST_F(IsolatorTests, SomeTest) 
{ 
     AClass* fakeclass = FAKE(AClass); 
     WHEN_CALLED(fakeclass->AFunction()).Return(10); 

     ASSERT_EQ(10, fakeclass.AFunction()); 
} 

Вы можете узнать больше об этом на этом about page

+0

Я прочитал про изолятор ++. но это не бесплатно. вы должны получить лицензию на это. –

+1

Да - к сожалению, они хотят денег за свою тяжелую работу;) –

+3

@DrorHelper Возможно, стоит отказаться от ответственности, что вы привыкли работать в Typemock. (Не то, что это делает его плохим продуктом и т. Д., Но его хорошо раскрывать такие потенциальные источники предвзятости). –

Смежные вопросы