Модульное тестирование Google Mock - PullRequest
0 голосов
/ 21 января 2012

Я только начал работать над модульным тестированием (для тестирования использую инфраструктуру BOOST, но для макетов я должен использовать Google Mock), и у меня такая ситуация:

class A
{
  A(){}
  virtual int Method1(int a, int b){return a+b;}
};

class B
{
  static int Method2(int a, int b){ return A().Method1(a,b);}
};

Возможно ли провести тестирование классаB, таким образом, использовать mocked Method1 вместо реального метода, но не менять класс B?Я знаю, что это будет легко:

class B
{
  B(A *a):a_in_b(a){}
  static int Method2(int a, int b){return a_in_b->Mehod1();}
  A *a_in_b;
};

Ответы [ 2 ]

1 голос
/ 23 сентября 2012

вы могли бы сначала изменить ваш Class A на синглтон, например:

class A
{
    A* Instance();
    virtual int Method1(int a, int b){return a+b;}
    static A* A_instance;
    A(){}
};
A::A_instance = NULL;

, а затем высмеять Class A:

#include <gmock/gmock.h>
class MockA : public A
{
    public:
        MOCK_METHOD2(Method1, int(int a, int b));
};

и изменить A(). на A::Instance()-> после;затем вы можете использовать следующие методы, чтобы Class B вызывать метод mock во время выполнения:

MockA mock;
A::A_instance = &mock;
EXPECT_CALL(mock, Method(_, _))
......(you can decide the times and return values of the mock method) 

для получения дополнительной информации, вы можете прочитать книгу рецептов gmock по адресу http://code.google.com/p/googlemock/wiki/CookBook

0 голосов
/ 22 января 2012

Вы можете следовать руководству по http://code.google.com/p/googlemock/wiki/ForDummies, чтобы создать для вас макет A:

#include <gmock/gmock.h>
class MockA : public A
{
public:
    MOCK_METHOD2(Method1, int(int a, int b));
};

Перед вызовом Method2 в классе B убедитесь, что B знает макет A (присвойте переменную в B вместе с Mockobject of A) и выполните EXPECT_CALL:

MockA mock;
EXPECT_CALL(mock, Method1(_, _)
    .WillRepeatedly(Return(a + b);

Убедитесь, что переменные a и b действительны в контексте выполнения теста.

...