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

做私活的网站今天的热点新闻

做私活的网站,今天的热点新闻,网站标签是什么,对php网站开发技术课程总结本文主要用于介绍一个完整的 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.cadmedia.cn/news/15650.html

相关文章:

  • 网站建设会用到ppt吗百度地图排名可以优化吗
  • 云南建设网站株洲seo优化哪家好
  • 网站建设 公司网站排名优化专业定制
  • 网站建设到上线步骤互联网推广公司靠谱吗
  • 阿里云wordpress优化seo外包服务项目
  • 腾讯云快速搭建网站上海网络优化服务
  • 长春哪家做网站做的好百度排名竞价
  • 自由室内设计师接单网站淘客推广
  • 建设网站哪间公司比较好it培训
  • 需要做网站的企业电话seo数据监控平台
  • 深圳深圳网站建设百度最新版app下载安装
  • 聊城市城乡建设部网站查询怎么查看网站的友情链接
  • 网上营销网站网络营销策划ppt范例
  • 网络推广和seo大连网站seo
  • 中小学 网站建设 通知流量平台
  • 广州网站建设推广今日新闻摘抄50字
  • 企业网站建设专业性体现在百度搜索大数据怎么查
  • 广州网站建设信科公司seo如何优化关键词
  • 网站建设作用 名词解释东莞网站定制开发
  • 甘肃 政府网站信息内容建设semir是什么牌子
  • 网站建设计划书 模板下载网站快速收录软件
  • 中国建筑网建设通证书查询整站优化系统厂家
  • 项目外包公司到底值不值得去快速seo关键词优化技巧
  • 南宁网站推广哪家好百度搜索引擎工作原理
  • 西安市住宅和城乡建设局网站搜索引擎排名优化方案
  • 河南省住建厅网站豫建设标网站模板大全
  • 网站建设中数据安全研究赣州seo公司
  • 宜宾网站建设多少钱360免费建站系统
  • 邯郸一站式网络推广欢迎咨询互联网销售是做什么的
  • dz网站自己做的模板放在哪里推广方案怎么写