对接口类的函数打桩

部署运行你感兴趣的模型镜像
//需要测试的类
RemoteNoticeEmailDSServiceImpl impl = new RemoteNoticeEmailDSServiceImpl();

EmailServerManager 是测试类中需要调用的接口

//对接口类的函数打桩
EmailServerManager emailAsService = [
setEmailServer:{arg->
}] as EmailServerManager;

//将mocket的对象注入到你需要调用该mocket对象函数的(setEmailServer) 的实体类对象中。
RemoteNoticeEmailDSServiceImpl impl = new RemoteNoticeEmailDSServiceImpl();
impl.setInternalRmNtSService emailAsService

您可能感兴趣的与本文相关的镜像

Anything-LLM

Anything-LLM

AI应用

AnythingLLM是一个全栈应用程序,可以使用商用或开源的LLM/嵌入器/语义向量数据库模型,帮助用户在本地或云端搭建个性化的聊天机器人系统,且无需复杂设置

在不同场景下有不同的函数打桩并调用(invoke)的实现方法: ### 新建测试工程中函数打桩方法 对于新建的测试工程,可先对所有被测源码执行“Generate Stubs”,让工具自动分析整个工程,若识别到未定义的变量或函数,工具会自动将其打桩,自动桩默认生成在“/stubs/autogenerated”路径下。针对某个函数进行单元测试时,若被测函数调用其他函数,需将调用的其他函数打桩以隔离复杂外部调用。可选中被测源文件,右键执行“Collect Stub Information(File Scope)”收集桩信息,执行后桩函数列表会出现相关函数列表,在列表中选中想打桩函数,右键选择“创建用户桩函数”,在弹出的自定义桩函数向导窗口中,自定义好桩文件的文件名和存放路径,即可自动创建该桩函数模板,之后可按需自定义桩函数内容[^1]。 ### C语言打桩函数CMocker 对待测函数中的某些行为打桩可方便单元测试(UT)/功能测试(FT)的开发,但桩打得越彻底,防护作用越弱。原则上不鼓励对边界内的函数打桩,在大型系统里,对边界外的接口打桩很常见,因为边界外接口会给边界内UT/FT开发带来较大成本[^2]。 ### 应用程序mock打桩 应用程序打桩可将应用发送数据时进行MOCK打桩,不在进行后端消息的发送,而是直接在mock处返回回调,使应用完全与后台分割,不依赖后台返回,而是直接返回成功。例如测试应用代码覆盖率时不依赖后端环境,直接使用gtest进行测试;压测应用接口最大TPS量等。以下是修改示例: ```cpp class SendDataMock { public: // 的初始化 SendDataMock(CTcpClientMock* client); void init(); public: // 调用消息的统一入口 void operator() (structDate& sdate); // Function call operator public: // 回调函数 void OnLogin(const structDate& sdate); // 调用函数 void SendToData(STRUCT_TYPE1 sType1, STRUCT_TYPE2 sType2, void* pData); private: // 全局map,用于存放回调函数指针, key是消息型 std::map<RN_INT64, std::function< void (const structDate& data)>> m_mapFun; CTcpClientMock* m_client = nullptr; }; ``` 此修改通过创建`SendDataMock`,将应用发送数据的逻辑进行打桩,使其不依赖后端消息发送,直接在mock处返回回调[^3]。 ### gmock和自定义方法 gmock只能mock虚函数,mockcpp难以mock成员函数,现存一些方法mock成员函数需填写大量参数且格式复杂。有一种自定义方法可进行简单的mock,示例如下: ```cpp Class Base{ void A(){} void B(int a){} void B(int a, int b){} }; void FakeA(){} void FakeB1(Base* ptr, int a){} void FakeB2(Base* ptr, int a,int b){} MOCK_FUNCTION(&Base::A).stubs().will(Invoke(FakeA)); MOCK_FUNCTION(Base::B, void(Base*,int)).stubs().will(Invoke(FakeB1)); MOCK_FUNCTION(Base::B, void(Base*,int,int)).stubs().will(Invoke(FakeB2)); ``` 该方法通过自定义`MOCK_FUNCTION`宏,可对成员函数进行打桩并指定调用的替代函数[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值