Подтвердить что ты не робот

Автоматическая генерация макетных классов для gmock

Я использую gmock для модульного тестирования кода на С++. Я не использую gtest framework. Я использую встроенную среду тестирования visual studio 2008.

Теперь моя проблема заключается в том, что мне приходится вручную писать макетные классы для реального класса в unit test. Например, если у меня есть класс 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));
};
4b9b3361

Ответ 1

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

Здесь информация из docs:

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

Вот новая локализация этого script.

Ответ 2

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

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

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

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

Вы можете узнать больше об этом на о странице