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

门户网站设计特点二级域名查询

门户网站设计特点,二级域名查询,做非法网站判刑多少年,库存管理软件免费 哪个好本文主要用于介绍一个完整的 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/792810.html

相关文章:

  • 专业的网站开发app开发公司入
  • 网站建设路由设置wordpress网站定时更新没有发布
  • 保护环境网站模板上海网站制作公司多少钱
  • php做网站如何广州专业的网站建设公司
  • 空间排版设计网站Wordpress hover插件
  • 如何用h5自己做网站自己怎样做公司广告视频网站
  • 网站建设方案 doc怎么做微信领券网站
  • 上海专业建网站广州专业网站制作公司
  • 珠海网站建设珠海做计算机模拟ie题模拟网站打不开
  • 能进封禁网站的手机浏览器灰产项目网
  • 手机房产网站模板wordpress 好用的编辑器
  • 手机建站怎么做网站流量竞品分析
  • 官方网站开发与定制医疗网站建设效果
  • asp.net网站开发 vs2017美发企业网站模板
  • 华艺网站开发wordpress火车头接口
  • 北京天润建设工程有限公司网站实时新闻热点
  • 商标设计网课seo推广优化公司
  • 网站建设文化价格成都有哪些设计公司
  • 巩义做网站优化软件工程很难学吗
  • 我不想找之前做网站的续费贵州建设厅考试网站准考证下载
  • 赣州市城乡建设局网站有没有跟一起做网店一样的网站
  • 网站建设电话销售工作总结南京专业建站
  • 安康哪里做网站深圳一公司今年成立16家核检机构
  • 洛阳网站建设汉狮怎么样青岛百度快速优化排名
  • 徐州网站简介响应式网站开发 三合一建站
  • 网站开发与维护课程设计公司起名最吉利的字
  • 郓城县城乡和建设局网站手机网站 app
  • 四川时宇建设工程有限公司官方网站主页去掉wordpress
  • 国内设计精美的网站杭州网站关键词
  • wordpress企业仿站企业营销型展厅设计价目表