首页 > 后端开发 > C++ > 正文

C++ 单元测试中伪造与存根的使用场景?

PHPz
发布: 2024-04-23 14:39:01
原创
592人浏览过

在单元测试中,伪造和存根用于创建测试隔离:伪造:模拟被测单元,控制行为并验证交互,用于替换外部或难以测试的依赖项。存根:特殊伪造,模拟函数或方法,始终返回固定值或执行指定动作,用于替换耗时或不稳定的依赖项。

C++ 单元测试中伪造与存根的使用场景?

C++ 单元测试中的伪造与存根的使用场景

在单元测试中,伪造和存根是创建测试隔离环境的两种强大技术。它们允许测试开发者在不依赖其他组件的情况下测试特定代码。

伪造(Mock)

立即学习C++免费学习笔记(深入)”;

伪造是为被测单元创建一个模拟版本,它可以控制其行为并验证其交互。伪造通常用于替换外部或难以测试的依赖项。

例如:

class UserService {
public:
  virtual User GetUser(int id) = 0;
};

class UserServiceMock : public UserService {
public:
  MOCK_METHOD(User, GetUser, (int id), (override));
};
登录后复制

在此示例中,UserServiceMock 是 UserService 的伪造,用于控制 GetUser() 方法的行为,以便可以在测试中对其进行验证。

存根(Stub)

存根是一种特殊的伪造,它模拟一个函数或方法,总是返回一个固定的值或执行指定的动作。存根通常用于替换耗时或不稳定的依赖项。

例如:

// SleepStub 不实际调用 sleep 函数,而是返回一个固定的值
class SleepStub {
public:
  static void Sleep(int) {}
};
登录后复制

使用案例

伪造和存根在单元测试中有多个使用案例,包括:

  • 测试与外部依赖项的交互。
  • 隔离难以或耗时的操作。
  • 验证参数传递和函数调用顺序。
  • 测试错误处理和异常情况。

实战案例

假设我们有一个函数,它从 UserService 获取用户并在数据库中更新用户的密码:

void UpdateUserPassword(int userId, const std::string& newPassword) {
  auto user = userService.GetUser(userId);
  user.SetPassword(newPassword);
  db.UpdateUser(user);
}
登录后复制

我们可以创建一个单元测试用例,使用 UserServiceMock 伪造 UserService 并验证函数的正确行为:

TEST(UpdateUserPassword, UpdatesPassword) {
  UserServiceMock userServiceMock;
  User expectedUser;
  EXPECT_CALL(userServiceMock, GetUser(userId)).WillOnce(Return(expectedUser));
  UpdateUserPassword(userId, newPassword);
  // Assert that the user password was set correctly
  ASSERT_EQ(expectedUser.GetPassword(), newPassword);
}
登录后复制

在这个测试用例中,我们确保 GetUser() 被调用了一次,并且返回了预期用户。然后,我们断言用户密码已正确更新。

以上就是C++ 单元测试中伪造与存根的使用场景?的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号