Mock Object

除了 C++ static function 和 C function,Hippomocks 也提供 mock class 的方法。

#include "hippomocks.h"

class SomeConcrete{
public:
    virtual ~SomeConcrete () {};
    virtual int vertualFunction() { return 0; };
};

TEST(HippoMocksDemo, Object)
{
    MockRepository mocks;

    SomeConcrete* some = mocks.Mock<SomeConcrete>();

    mocks.ExpectCall(some, SomeConcrete::vertualFunction).Return(123);

    EXPECT_EQ(123, some->vertualFunction());                    // pass
}

pure virtual function 也可以

#include "hippomocks.h"

class SomeInterface{
public:
    virtual ~SomeInterface () {};
    virtual int pureVertualFunction() = 0;
};

TEST(HippoMocksDemo, pureVertualFunction)
{
    MockRepository mocks;

    SomeInterface* some = mocks.Mock<SomeInterface>();

    mocks.ExpectCall(some, SomeInterface::pureVertualFunction).Return(123);

    EXPECT_EQ(123, some->pureVertualFunction());                  // pass
}

但是 Hippomocks 無法 mock 不是 virtual 的 function

#include "hippomocks.h"

class SomeConcrete{
public:
    virtual ~SomeConcrete () {};
    int notVertualFunction() { return 0; };
};

TEST(HippoMocksDemo, notVertualFunction)
{
    MockRepository mocks;

    SomeConcrete* some = mocks.Mock<SomeConcrete>();

    mocks.ExpectCall(some, SomeConcrete::notVertualFunction).Return(123);

    EXPECT_EQ(123, some->notVertualFunction());                // fail
}

跟其他 framework 比較,例如 Google Mock,Hippomocks 針對 class mock 的功能相對少,所以不建議使用 Hippomocks 來 mock class。

results matching ""

    No results matching ""