Heim > Artikel > Backend-Entwicklung > Welche Anwendungsszenarien gibt es für Fake und Stubbing beim C++-Unit-Testen?
Bei Unit-Tests werden Fakes und Stubs verwendet, um eine Testisolation zu erstellen: Fakes: Simulieren Sie die zu testende Einheit, steuern Sie das Verhalten und überprüfen Sie Interaktionen. Sie werden verwendet, um externe oder schwer zu testende Abhängigkeiten zu ersetzen. Stub: Eine spezielle gefälschte, simulierte Funktion oder Methode, die immer einen festen Wert zurückgibt oder eine bestimmte Aktion ausführt und verwendet wird, um zeitaufwändige oder instabile Abhängigkeiten zu ersetzen.
Verwendungsszenarien von Fake und Stubbing in C++-Unit-Tests
Bei Unit-Tests sind Fake und Stubbing zwei leistungsstarke Techniken zum Erstellen von Testisolationsumgebungen. Sie ermöglichen es Testentwicklern, spezifischen Code zu testen, ohne auf andere Komponenten angewiesen zu sein.
Mock
Mock ist die Erstellung einer simulierten Version des zu testenden Geräts, mit der Sie sein Verhalten steuern und seine Interaktionen überprüfen können. Fake wird häufig verwendet, um externe oder schwer zu testende Abhängigkeiten zu ersetzen.
Zum Beispiel:
class UserService { public: virtual User GetUser(int id) = 0; }; class UserServiceMock : public UserService { public: MOCK_METHOD(User, GetUser, (int id), (override)); };
In diesem Beispiel ist UserServiceMock
eine Fälschung von UserService
und wird verwendet, um das Verhalten von GetUser()-Methode, damit sie in Tests überprüft werden kann. <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
abruft und das Passwort des Benutzers in der Datenbank aktualisiert: 🎜rrreee🎜Wir können eine Einheit erstellen Testfall: Verwenden Sie UserServiceMock
, um UserService
zu fälschen und das korrekte Verhalten der Funktion zu überprüfen: 🎜rrreee🎜In diesem Testfall stellen wir sicher, dass GetUser() code> ist Es wurde einmal aufgerufen und der erwartete Benutzer wurde zurückgegeben. Wir stellen dann sicher, dass das Passwort des Benutzers korrekt aktualisiert wurde. 🎜
Das obige ist der detaillierte Inhalt vonWelche Anwendungsszenarien gibt es für Fake und Stubbing beim C++-Unit-Testen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!