Требуется справка по Google Mock, - PullRequest
1 голос
/ 09 февраля 2012

У меня есть 2 класса.

class SomeClass
{
public:
    int SomeFunction()
    {
        return 5;
    }
};


class AnotherClass
{
public:
    int AnotherFunction(SomeClass obj)
    {
        return obj.SomeFunction();
    }
};

Я создал фиктивный класс для SomeClass.

class MockSomeClass : public SomeClass
{
public:
    MOCK_METHOD0(SomeFunction, int());
};

Теперь я хочу в модульном тесте, что когда я вызываю AnotherClass.AnotherFunction, я получаю результат по своему выбору. AnotherFunction использует функцию SomeClass.SomeFunction (). Я издевался над SomeClass. И я установил, что когда функция вызываемого объекта вызывает его, он возвращается 10. Но когда я запускаю модульное тестирование, он возвращает 5 (оригинальная функция). Что я должен делать. Ниже приведен модульный тест, который я написал.

[TestMethod]
    void TestMethod1()
    {
        MockSomeClass mock;
        int expected = 10;
        ON_CALL(mock, SomeFunction()).WillByDefault(Return(expected));
        AnotherClass realClass;
        int actual = realClass.AnotherFunction(mock);           
        Assert::AreEqual(expected, actual);
    };

Я использую Visual Studio 2008 и Gmock 1.6.0. Что не так я делаю. на realClass.AnotherFunction я хочу смоделированный вывод из mock.SomeFunction ().

1 Ответ

3 голосов
/ 09 февраля 2012

Проблема в том, что SomeClass :: SomeFunction (...) не является виртуальным, сделайте его виртуальным, и он будет работать.

Обновление:

Существует еще одна фундаментальная ошибка, которая приводит к сбою, а именно сигнатура метода

int AnotherFunction(SomeClass obj)

, который создает новый экземпляр объекта SomeClass, который, в свою очередь, вызывает нормальную функцию SomeFunction, вместо этого вы должны передать ссылку на проверяемый класс в качестве аргумента.

int AnotherFunction(SomeClass* obj)

и вызовите его, используя

int actual = realClass.AnotherFunction(&mock);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...