当前位置: 首页 > wzjs >正文

网站建站视频教程seo人才招聘

网站建站视频教程,seo人才招聘,装修公司经营范围,三亚门户本文主要用于介绍一个完整的 GTest GMock 使用示例,涵盖了接口定义、Mock 类实现、被测试类、以及单元测试代码,展示了如何使用 GMock 模拟依赖并进行行为验证。 项目结构 gtest_gmock_demo/ ├── CMakeLists.txt ├── include/ │ └── datab…

本文主要用于介绍一个完整的 GTest + GMock 使用示例,涵盖了接口定义、Mock 类实现、被测试类、以及单元测试代码,展示了如何使用 GMock 模拟依赖并进行行为验证。


项目结构

gtest_gmock_demo/
├── CMakeLists.txt
├── include/
│   └── database.h
|     └── user_service.h
├── src/
│   └── user_service.cpp
├── test/
│   ├── user_service_test.cpp
│   └── mock_database.h

1. 接口定义:include/database.h

#pragma once
#include <string>class IDatabase {
public:virtual ~IDatabase() = default;virtual bool connect(const std::string& db_uri) = 0;virtual bool save_user(const std::string& username, int age) = 0;
};

2. 业务实现:src/user_service.cpp

// include/user_service.h
#pragma once#include "database.h"class UserService {
public:UserService(IDatabase *db);bool register_user(const std::string& username, int age);private:IDatabase *db_;
};
// src/user_service.cpp
#include "user_service.h"UserService::UserService(IDatabase *db) : db_(db) {}bool UserService::register_user(const std::string& username, int age) {if (db_ == nullptr || username.empty() || age <= 0) {return false;}return db_->save_user(username, age);
}

3. GMock 模拟类:test/mock_database.h

#pragma once
#include "database.h"
#include <gmock/gmock.h>class MockDatabase : public IDatabase {
public:MOCK_METHOD(bool, connect, (const std::string& db_uri), (override));MOCK_METHOD(bool, save_user, (const std::string& username, int age), (override));
};

4. 单元测试:test/user_service_test.cpp

#include "mock_database.h"
#include "user_service.h" 
#include <gtest/gtest.h>TEST(UserServiceTest, RegisterUserSuccess) {MockDatabase mock_db;UserService service(&mock_db);// 设定期望:save_user 被调用一次,参数为 "alice", 30,返回 trueEXPECT_CALL(mock_db, save_user("alice", 30)).Times(1).WillOnce(::testing::Return(true));EXPECT_TRUE(service.register_user("alice", 30));
}TEST(UserServiceTest, RegisterUserFail_EmptyName) {MockDatabase mock_db;UserService service(&mock_db);// 不应调用 save_userEXPECT_CALL(mock_db, save_user(::testing::_, ::testing::_)).Times(0);EXPECT_FALSE(service.register_user("", 25));
}TEST(UserServiceTest, RegisterUserFail_NegativeAge) {MockDatabase mock_db;UserService service(&mock_db);EXPECT_CALL(mock_db, save_user(::testing::_, ::testing::_)).Times(0);EXPECT_FALSE(service.register_user("bob", -10));
}

CMake 配置:CMakeLists.txt

cmake_minimum_required(VERSION 3.14)project(GTestGMockDemo)set(CMAKE_CXX_STANDARD 17)enable_testing()include_directories(include)include(FetchContent)
FetchContent_Declare(googletestURL https://github.com/google/googletest/archive/refs/heads/main.zip
)FetchContent_MakeAvailable(googletest)add_executable(unit_testssrc/user_service.cpptest/user_service_test.cpp
)target_link_libraries(unit_testsGTest::gtestGTest::gmockGTest::gtest_mainpthread
)add_test(NAME AllTests COMMAND unit_tests)

编译和运行测试


mkdir build && cd build
cmake ..
make
./unit_tests

相关知识点

模块说明
IDatabase依赖接口,用于隔离测试
MockDatabaseGMock 自动生成桩代码
UserService被测试的业务逻辑
EXPECT_CALL验证函数是否按预期调用
http://www.dtcms.com/wzjs/488477.html

相关文章:

  • 海南在线人才网招聘官网seo优化软件大全
  • 外贸出口工艺品怎么做外贸网站东莞做网站seo
  • 网站建设公司响应式网站模板互联网推广软件
  • 快速做网站联系电话网站建设一般多少钱
  • 冒用公司名义做网站app拉新任务平台
  • 沧州1 1 网站建设网络营销swot分析
  • 公司在线起名免费网百度seo关键词排名
  • wordpress 访问路径今日头条搜索优化怎么做
  • 吉林省住房建设厅网站网址大全百度
  • 建设工程消防监督管理规定网站杭州网站优化
  • 可以做英文纵横字谜的网站长春seo网站管理
  • 网站建设能在家工作上海空气中检测出病毒
  • wordpress用户上传视频教程北京网站建设优化
  • 武汉做网站专业建站环球网疫情最新动态
  • 可做产品预售的网站免费网站怎么注册
  • 清河网站建设费用seo快速排名软件
  • 有中文网站 怎么做英文网站推广公司简介
  • 音乐网站怎么做无线增值业务如何在百度上发表文章
  • 51单片机可以做网站销售推广
  • 信息平台网站的建设 文档seo搜索引擎优化课程总结
  • wordpress采集 知乎做灰色词seo靠谱
  • 可以写代码的网站app推广方案范例
  • 不拦截网站的浏览器株洲seo排名
  • 精美 企业网站模板竞价账户
  • 做视频编辑哪个网站素材比较好网络营销的模式有哪些?
  • 许昌那有做网站自动引流推广app
  • 石家庄网站建设推广公司报价人民日报最新新闻
  • 做网站还需要服务器吗加盟教育培训机构
  • 国外做评论的网站女生做sem还是seo
  • 视频网站用什么做网站外链出售