5 - Google Mock 进阶篇 -- 3.2 如何禁用不需要的调用

3.2 如何禁用不需要的调用 

1 。 如果一个Mock函数根本不应该被调用,可以明确地指出:

using ::testing::_;

...

EXPECT_CALL(foo, Bar(_))

 .Times(0); //一次都不要调用

   如果对一个函数的某些调用是允许的,其它的调用则不行,则可以列出所有期望的调用:

using ::testing::AnyNumber;

using ::testing::Gt;

...

EXPECT_CALL(foo, Bar(5));

EXPECT_CALL(foo, Bar(Gt(10)))

 .Times(AnyNumber());

   如果一个调用不匹配任一EXPECT_CALL(),那它会产生一个错误。

 2. 案例: Fool.h 


#include "pch.h" 
#ifndef FOOL_H_
#define FOOL_H_

	class Fool {
	public:
		// Foo();
		virtual ~Fool() {};
		virtual int GetBar() const=0;
		virtual void Bar(int bsize)=0;
	};

#endif

FooDay.h 调用Fool对象里的方法

#pragma once
#include "pch.h"
#include "Foo.h"


class FooDay 
{
	Fool* foo;
	int fooLaughtTimes = 0;
public:
	FooDay(Fool* foo)
		: foo(foo) {}

	bool printBar(int stepValue) {
		foo->Bar(stepValue);
		fooLaughtTimes = stepValue + 1;
		return true;
	}

	int showBar() {
		fooLaughtTimes = foo->GetBar();
		return fooLaughtTimes;
	}
};
 

使用gMock方法模拟Fool里的未实现的方法

#pragma once
#include "Foo.h"
#include "gmock/gmock.h"


class MockFoo : public Fool {
public:
	MOCK_CONST_METHOD0(GetBar, int());
	MOCK_METHOD1(Bar, void(int bsize));

};

TestFooDay.cpp  那么在执行Gtest的时候,对已经gMock的方法,设置方法调用次数 :

用到我们前面说的:

Times(0);

// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
 
#include "pch.h"
#include <iostream>
#include "MockFool.h"
#include "FooDay.h"
 
#include "gtest/gtest.h"

using namespace std;
using ::testing::_;
using ::testing::AnyNumber;
using ::testing::Gt;
using ::testing::Return;



TEST(fooDayTest, showBarTest) {
	MockFoo foo;

	EXPECT_CALL(foo, Bar(_))
		.Times(1);//一次都不要调用

	EXPECT_CALL(foo, GetBar())
		.WillOnce(Return(2));
	
	FooDay fooday(&foo);

	EXPECT_EQ(2, fooday.showBar())<<"Bar() function was run.";
}

以下是运行结果,Bar()运行0次:

3. 如果将:    EXPECT_CALL(foo, Bar(_))
        .Times(0);//一次都不要调用

改成:

    EXPECT_CALL(foo, Bar(_))
        .Times(1);

或者没有设置次数:    EXPECT_CALL(foo, Bar(_));

 这时候,这个期望返回值, 默认也是要至少调用一次。那么运行就会出错:因为测试调用Bar()一次都没有执行。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值