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次:

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

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

改成:

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/101693.html

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容