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

网站如何做前后端分离网络营销课程学什么

网站如何做前后端分离,网络营销课程学什么,松江品划企业网站建设,镇江网站制作费用本文主要用于介绍一个完整的 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/a/435360.html

相关文章:

  • 自己手机怎么免费做网站安徽四建东方建设有限公司网站
  • 域名后缀cn做网站家装设计师需要考证吗
  • 广州网站vi设计报价网站建设 图片问题
  • 数据安全能力成熟度模型 (DSMM) 核心要点
  • 飞算JavaAI 使用指南
  • 打鱼跟电子游戏网站怎么做深圳网站制作公司兴田德润信任高
  • 企业级桌面软件如何通过UI/UE设计提升生产效率?
  • 企业级网站内容管理系统学用mvc4做网站
  • 4-7〔O҉S҉C҉P҉ ◈ 研记〕❘ WEB应用攻击▸文件上传漏洞-B
  • 大模型PEFT参数高效微调-详解
  • 设置网站关键词怎么做济南网站优化网站
  • 网站建设属于IT吗备案网站ip
  • 网站营销成功的案例温州 建网站
  • 使用python的围棋落子策略
  • 做网站的职位叫什么wordpress页面无法更新
  • Eclipse 创建 Java 包
  • K8s学习笔记(十) Deployment 副本控制器
  • daily notes[68]
  • SPI Flash基础知识点 (chatgpt版本)
  • 昆明城乡和住房建设局网站做网站公司的收费多少
  • LLM 笔记 —— 02 大语言模型能力评定
  • 做网站视频用哪个视频编辑软件网站设计相似侵权吗
  • [特殊字符]灵感补给站 | pinterest 设计灵感分享 UI版面设计3
  • 网站主机一般选哪种的远程访问群晖wordpress
  • Edit Starts找不到Mybatis Framwork依赖
  • 【C++算法】类与对象通用题目解析分享
  • C语言中原子操作(简要)
  • 珠宝行业做网站的好处网站建设平台有哪些 谢谢平台建站
  • OpenOCD 终端使用指令大全
  • JS工具函数与代码优化实战