Вы можете сделать это, создав независимый класс 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);
}
не может быть лучшим способом, но серверов, к которым предназначены. Надеюсь, он поможет
Я думаю, вы спрашиваете, как правильно издеваться над методами? Не тестируйте класс, так как это будет тривиально в вашем примере. – Martin
Что-то вроде этого. класс B { аннулируются хуг {A :: Method1 (х, у)}} это case.How Do I GTEST Класс B. Я знаю, что я должен издеваться класса A.But без внесения каких-либо изменения в исходном коде. Как я могу проверить B? – Viky
Без изменений вы не можете высмеивать Method1 при тестировании класса B. Учитывая ваш пример, немного сложно дать конкретный совет, поскольку вызов метода 1 бессмыслен. Если вы просто хотите убедиться, что вызов был выполнен правильно, возможно, добавьте статический метод в конструктор B и передайте функцию макета при тестировании. – Martin