Maison > Article > développement back-end > Quels sont les scénarios d’utilisation de la falsification et du stubbing dans les tests unitaires C++ ?
Dans les tests unitaires, les faux et les stubs sont utilisés pour créer une isolation de test : faux : simulez l'unité testée, contrôlez le comportement et vérifiez les interactions, utilisés pour remplacer les dépendances externes ou difficiles à tester. Stub : une fausse fonction ou méthode spéciale simulée qui renvoie toujours une valeur fixe ou effectue une action spécifiée, utilisée pour remplacer des dépendances fastidieuses ou instables.
Scénarios d'utilisation de falsification et de stubbing dans les tests unitaires C++
Dans les tests unitaires, la falsification et le stubbing sont deux techniques puissantes pour créer des environnements d'isolation de tests. Ils permettent aux développeurs de tests de tester du code spécifique sans s'appuyer sur d'autres composants.
Mock
Mock est la création d'une version simulée de l'unité testée qui vous permet de contrôler son comportement et de vérifier ses interactions. Fake est souvent utilisé pour remplacer des dépendances externes ou difficiles à tester.
Par exemple :
class UserService { public: virtual User GetUser(int id) = 0; }; class UserServiceMock : public UserService { public: MOCK_METHOD(User, GetUser, (int id), (override)); };
Dans cet exemple, UserServiceMock
est un faux de UserService
et est utilisé pour contrôler le comportement de GetUser() méthode , afin qu'elle puisse être vérifiée lors de tests. <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
et met à jour le mot de passe de l'utilisateur dans la base de données : 🎜rrreee🎜Nous pouvons créer une unité Scénario de test, utilisez UserServiceMock
pour simuler UserService
et vérifier le comportement correct de la fonction : 🎜rrreee🎜Dans ce cas de test, nous nous assurons que GetUser() code> est Il a été appelé une fois et l'utilisateur attendu a été renvoyé. Nous affirmons alors que le mot de passe de l'utilisateur a été correctement mis à jour. 🎜
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!