2016-03-08 2 views
0

Я использую Gmock для тестирования. У меня есть класс, где все методы статичны. Для примераGmock для статических методов

class A 
{ 
    static int Method1(int x,int y){return (x+y)}; 
}; 

Как протестировать этот класс с помощью Gmock. Пожалуйста, помогите мне. Thanks

+0

Я думаю, вы спрашиваете, как правильно издеваться над методами? Не тестируйте класс, так как это будет тривиально в вашем примере. – Martin

+0

Что-то вроде этого. класс B { аннулируются хуг {A :: Method1 (х, у)}} это case.How Do I GTEST Класс B. Я знаю, что я должен издеваться класса A.But без внесения каких-либо изменения в исходном коде. Как я могу проверить B? – Viky

+0

Без изменений вы не можете высмеивать Method1 при тестировании класса B. Учитывая ваш пример, немного сложно дать конкретный совет, поскольку вызов метода 1 бессмыслен. Если вы просто хотите убедиться, что вызов был выполнен правильно, возможно, добавьте статический метод в конструктор B и передайте функцию макета при тестировании. – Martin

ответ

0

Вы не можете сделать это без изменения вашего кода. Но вы можете связать свое приложение с заглубленным объектом. Просто создайте другую реализацию класса А и свяжите ее с тестовым приложением.

0

Вы можете сделать это, создав независимый класс Mock, который не будет получен из класса, который вам нужен для Mock. Вот как вы это сделаете.

Шаг - 1: Комментарий статическая функция класса, имеющий

// Comment the class 
/* 
    class A 
    { 
     static int Method1(int x,int y){return (x+y)}; 
    }; 
*/ 

Шаг - 2: Создано Пробный класс с тем же именем, как A и дразнят Method1 в нем. Обратите внимание, что его не является производным от исходного класса

class A { 
public: 
    MOCK_METHOD2(Method1, int(int x, int y)); 
}; 

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

class UsingA { 
    A &a1; 
public: 
    UsingA(A & _a1) : a1(_a1) {} 
    int CallFn() { 
     // Original function that needs to be commented 
     // return a1::Method1(10,25); 
     return a1.Method1(10, 20); 
    } 
}; 

Тогда вот как вы будете писать тест-

TEST(MyMockTest, Method1Test) { 
    A mstat; 
    UsingA ua(mstat); 

    EXPECT_CALL(mstat, Method1(_,_)) 
    .Times(1) 
    .WillOnce(Return(100)); 

    int retVal = ua.CallFn(); 

    EXPECT_EQ(retVal,100); 

} 

не может быть лучшим способом, но серверов, к которым предназначены. Надеюсь, он поможет

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