단위 테스트에서 가짜와 스텁은 테스트 격리를 만드는 데 사용됩니다. 가짜: 테스트 중인 단위를 시뮬레이션하고, 동작을 제어하고, 상호 작용을 확인하며, 외부 또는 테스트하기 어려운 종속성을 대체하는 데 사용됩니다. 스텁(Stub): 항상 고정된 값을 반환하거나 지정된 작업을 수행하는 특별한 가짜, 시뮬레이션된 함수 또는 메서드로, 시간이 많이 걸리거나 불안정한 종속성을 대체하는 데 사용됩니다.
C++ 단위 테스트에서 위조 및 스텁 사용 시나리오
단위 테스트에서 위조 및 스텁은 테스트 격리 환경을 만드는 두 가지 강력한 기술입니다. 이를 통해 테스트 개발자는 다른 구성 요소에 의존하지 않고 특정 코드를 테스트할 수 있습니다.
Mock
Mock은 동작을 제어하고 상호 작용을 확인할 수 있는 테스트 중인 장치의 모의 버전을 만드는 것입니다. 가짜는 외부 종속성이나 테스트하기 어려운 종속성을 대체하는 데 자주 사용됩니다.
예:
class UserService { public: virtual User GetUser(int id) = 0; }; class UserServiceMock : public UserService { public: MOCK_METHOD(User, GetUser, (int id), (override)); };
이 예에서 UserServiceMock
는 UserService
의 가짜이며 GetUser() 메소드를 사용하여 테스트에서 확인할 수 있습니다. <code>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()
UserService
에서 사용자를 가져오고 데이터베이스에서 사용자의 비밀번호를 업데이트하는 함수가 있다고 가정해 보겠습니다. 🎜rrreee🎜유닛을 만들 수 있습니다. 테스트 사례에서는 UserServiceMock
를 사용하여 UserService
를 위조하고 함수의 올바른 동작을 확인합니다. 🎜rrreee🎜이 테스트 사례에서는 GetUser() code> 는 한 번 호출되었고 예상한 사용자가 반환되었습니다. 그런 다음 사용자의 비밀번호가 올바르게 업데이트되었는지 확인합니다. 🎜
위 내용은 C++ 단위 테스트에서 위조 및 스텁의 사용 시나리오는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!