c++ - 使用 gtest & gmock 验证程序调用

标签 c++ unit-testing googletest googlemock

我正在使用 google mock 和 google test,我有一个对象,例如:

  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 告诉我这些方法都没有被调用,我应该使用什么?

感谢您的解释

最佳答案

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

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

MockFoo mock ;

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

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

关于c++ - 使用 gtest & gmock 验证程序调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43757937/

相关文章:

c++ - 使用 GoogleTest 进行复合测试?

c++ - 整合 'google test' 和 'boost program options'

c++ - 如何在 C 代码上从终端运行 Google 测试?

unit-testing - Groovy:junit 的面向测试的输出

php - 从 PHPUnit 代码覆盖率中排除 PHP 接口(interface)

cmake - BUILD_BYPRODUCTS 和 cmake + ninja + googletest + ExternalProject_Add 的依赖周期

c++ - 补偿 double/float 不准确

c++ - 10 秒后运行代码或按下某个键

c++ - boost 不相交集:如何检索集?

c++ - 对于这两组连续的相同循环,是否有更有效的解决方案?