同じクラスの他のメソッド呼び出し内からのGooglemock mockメソッド呼び出しはできますか?

StackOverflow https://stackoverflow.com/questions/8919487

質問

同じクラスの他のメソッド呼び出し内からメソッド呼び出しを模倣することは可能ですか?私はC ++(主にC開発者)が初めてで、GooglemockとGoogleテストが非常に新しいので、これが他の場所で答えられていて、答えがわかりませんでした!以下は、私がやりたいことを説明すべき簡単な例です。以下の例を使用して、ock笑したいです ReturnInput, 、テスト中 ReturnInputPlus1.

using ::testing::Invoke;
using ::testing::_;
using ::testing::Return;

class MyClass
{
public:
    MyClass() : x(1) {}
    virtual ~MyClass() {}

    int ReturnInput(int x) { return x; }
    int ReturnInputPlus1(int x) { return ReturnInput(x) + 1; }
};

class MockMyClass : public MyClass
{
public:
    MockMyClass()
    {
        ON_CALL(*this, ReturnInput(_)).WillByDefault(Invoke(&real, &MyClass::ReturnInput));
        ON_CALL(*this, ReturnInputPlus1(_)).WillByDefault(Invoke(&real, &MyClass::ReturnInputPlus1));
    }
    virtual ~MockMyClass() {}

    MOCK_METHOD1(ReturnInput, int(int y));
    MOCK_METHOD1(ReturnInputPlus1, int(int));

private:
    MyClass real;
};

TEST(MyClassTest, mockUseClassMethod)
{
    MockMyClass mock;

    EXPECT_CALL(mock, ReturnInput(_))
        .WillOnce(Return(2));
    EXPECT_CALL(mock, ReturnInputPlus1(_))
        .Times(1);

    EXPECT_EQ(3, mock.ReturnInputPlus1(1));
}

上記のテストを実行すると、すべてのテストが成功すると予想されます。代わりに、次の出力を取得します。

1>[ RUN      ] MyClassTest.mockUseClassMethod
1>.\MyClassTest.cpp(15): error: Value of: mock.ReturnInputPlus1(1)
1>  Actual: 2
1>Expected: 3
1>.\DllInfoTest.cpp(10): error: Actual function call count doesn't match EXPECT_CALL(mock, ReturnInput(_))...
1>         Expected: to be called once
1>           Actual: never called - unsatisfied and active

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top