GoogleTest中的Mock用法

通常在团队开发过程中,业务逻辑会有上下游依赖,你所负责的部分可能会依赖其他团队成员提供的接口功能,在其他成员还没有提供可用的接口之前,你的开发工作可能会因为缺乏必要接口被阻塞,此时需要对这些尚未实现的接口进行模拟(Mock),以便你本地的工作能够正常推进。

一个典型的Gmock用法如博文:Gtest/Gmock探究(三)-- MOCK_METHODX系列宏分析_mock method-CSDN博客所示,首先创建一个抽象接口类,然后派生一个子类Mock该接口类的的纯虚接口,最后开始基于该子类进行单元测试。除此之外,还可以用googletest提供的预置模板类NiceMock进行特定接口mock,而不必为所有的接口做Mock实现。比如,只想mock一下读取数据的函数,可以不用继承那个抽象接口类,直接进行Mock:

#include 
#include 
#include 
using namespace std;

class Mock_OpenFile_Operator
{
	public:
		MOCK_METHOD1(ReadRawData, std::string& (const char*));
};


class FileDataLoad
{
	public:
		FileDataLoad() = default;
		template //等到你同事提供了真接口实现时,将此处模板去掉,改用真接口类即可
		void FileDataRead(testing::NiceMock* Op, const char* path)
		{
			string& data = Op->ReadRawData(path);
			std::cout << "file content: " << data << std::endl;
		}

};

int main(int argc, char* argv[])
{
	testing::NiceMock FileReader;
	string content = "test data.";
	EXPECT_CALL(FileReader, ReadRawData(::testing::_))
				.WillOnce(testing::ReturnRef(content));
	FileDataLoad loader;
	loader.FileDataRead(&FileReader, "dummmpy/path/to/file");
    return 0;
}

 

 

你可能感兴趣的:(后端,c++)