>  기사  >  백엔드 개발  >  C++ 단위 테스트에서 위조 및 스텁의 사용 시나리오는 무엇입니까?

C++ 단위 테스트에서 위조 및 스텁의 사용 시나리오는 무엇입니까?

PHPz
PHPz원래의
2024-04-23 14:39:01623검색

단위 테스트에서 가짜와 스텁은 테스트 격리를 만드는 데 사용됩니다. 가짜: 테스트 중인 단위를 시뮬레이션하고, 동작을 제어하고, 상호 작용을 확인하며, 외부 또는 테스트하기 어려운 종속성을 대체하는 데 사용됩니다. 스텁(Stub): 항상 고정된 값을 반환하거나 지정된 작업을 수행하는 특별한 가짜, 시뮬레이션된 함수 또는 메서드로, 시간이 많이 걸리거나 불안정한 종속성을 대체하는 데 사용됩니다.

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

C++ 단위 테스트에서 위조 및 스텁 사용 시나리오

단위 테스트에서 위조 및 스텁은 테스트 격리 환경을 만드는 두 가지 강력한 기술입니다. 이를 통해 테스트 개발자는 다른 구성 요소에 의존하지 않고 특정 코드를 테스트할 수 있습니다.

Mock

Mock은 동작을 제어하고 상호 작용을 확인할 수 있는 테스트 중인 장치의 모의 버전을 만드는 것입니다. 가짜는 외부 종속성이나 테스트하기 어려운 종속성을 대체하는 데 자주 사용됩니다.

예:

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

class UserServiceMock : public UserService {
public:
  MOCK_METHOD(User, GetUser, (int id), (override));
};

이 예에서 UserServiceMockUserService의 가짜이며 GetUser() 메소드를 사용하여 테스트에서 확인할 수 있습니다. <code>UserServiceMockUserService 的伪造,用于控制 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()

🎜스텁 🎜🎜🎜스텁은 항상 고정된 값을 반환하거나 지정된 작업을 수행하는 함수나 메서드를 시뮬레이션하는 특별한 종류의 위조입니다. 스텁은 시간이 많이 걸리거나 불안정한 종속성을 대체하는 데 자주 사용됩니다. 🎜🎜🎜예: 🎜🎜rrreee🎜🎜사용 사례 🎜🎜🎜가짜 및 스텁에는 다음을 포함하여 단위 테스트에서 여러 사용 사례가 있습니다. 🎜
  • 외부 종속성과의 상호 작용 테스트.
  • 어렵거나 시간이 많이 걸리는 작업을 분리합니다.
  • 매개변수 전달 및 함수 호출 순서를 확인하세요.
  • 오류 처리 및 예외 조건을 테스트합니다.
🎜🎜실제 사례🎜🎜🎜 UserService에서 사용자를 가져오고 데이터베이스에서 사용자의 비밀번호를 업데이트하는 함수가 있다고 가정해 보겠습니다. 🎜rrreee🎜유닛을 만들 수 있습니다. 테스트 사례에서는 UserServiceMock를 사용하여 UserService를 위조하고 함수의 올바른 동작을 확인합니다. 🎜rrreee🎜이 테스트 사례에서는 GetUser() code> 는 한 번 호출되었고 예상한 사용자가 반환되었습니다. 그런 다음 사용자의 비밀번호가 올바르게 업데이트되었는지 확인합니다. 🎜

위 내용은 C++ 단위 테스트에서 위조 및 스텁의 사용 시나리오는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.