使用gtest和amp;验证程序调用gmock

时间:2017-05-03 10:50:30

标签: c++ unit-testing googletest gmock

我正在使用谷歌模拟&谷歌测试,我有一个对象,如:

  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()不是每当失败(=返回值<5) 所以我写了类似的东西:

MockFoo mock ;

mock.method(badArg);

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

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

但gtest告诉我,这些方法都没有被调用,我应该使用什么?

感谢您的解释

1 个答案:

答案 0 :(得分:1)

要正确使用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);