使用 gtest & gmock 验证程序调用

Verify program calls with gtest & gmock

我正在使用 google 模拟和 google 测试,我有一个对象,例如:

  class Foo {
    public :
        Foo(){}

        virtual void method(int arg) {
            int var = a(arg) ;
            if (var<5){
                b() ;
            }
        }

        virtual int a(int arg){
            // do stuff
        }

        virtual int b(){
            // do stuff
        }
}

我想检查 a() 被调用一次,而 b() 不是每当 a 失败时( = return 值 <5) 所以我写了类似的东西:

MockFoo mock ;

mock.method(badArg);

EXPECT_CALL(
    mock,
    a
)
.Times(1) ;

EXPECT_CALL(
    mock,
    a
)
.Times(0) ;

但是gtest告诉我调用了none个方法,我应该用什么?

感谢您的解释

要正确使用 gmock,您需要先设置您的期望,然后您运行 真正的东西。这样,gmock 就知道会发生什么,并且能够分析真实的东西是否真的满足要求。否则,如果您在设置期望值之前调用该函数,就像在您投球后要求接球手进入待命位置一样。偏离路线的接球手将错过。

在你的情况下,你想要这样的东西:

MockFoo mock ;

// Catchers ready!
EXPECT_CALL(mock, a)
    .Times(1) ;
EXPECT_CALL(mock, b)
    .Times(0) ;

// Here's the ball!!
mock.method(watermelon);