Dalam ujian unit, palsu dan stub digunakan untuk mencipta pengasingan ujian: palsu: simulasi unit yang sedang diuji, mengawal tingkah laku dan mengesahkan interaksi, digunakan untuk menggantikan kebergantungan luaran atau sukar untuk diuji. Stub: Fungsi atau kaedah simulasi palsu khas yang sentiasa mengembalikan nilai tetap atau melakukan tindakan tertentu, digunakan untuk menggantikan kebergantungan yang memakan masa atau tidak stabil.
Senario penggunaan pemalsuan dan stubbing dalam ujian unit C++
Dalam ujian unit, pemalsuan dan stubbing ialah dua teknik berkuasa untuk mencipta persekitaran pengasingan ujian. Mereka membenarkan pembangun ujian menguji kod tertentu tanpa bergantung pada komponen lain.
Mock
Mock ialah penciptaan versi simulasi unit yang sedang diuji yang membolehkan anda mengawal kelakuannya dan mengesahkan interaksinya. Palsu sering digunakan untuk menggantikan kebergantungan luaran atau sukar untuk diuji.
Contohnya:
class UserService { public: virtual User GetUser(int id) = 0; }; class UserServiceMock : public UserService { public: MOCK_METHOD(User, GetUser, (int id), (override)); };
Dalam contoh ini, UserServiceMock
ialah palsu UserService
dan digunakan untuk mengawal kelakuan GetUser()< /code> kaedah , supaya ia boleh disahkan dalam ujian. <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()
UserServiceMock
untuk memalsukan UserService
dan sahkan kelakuan fungsi yang betul: 🎜rrreee🎜Dalam kes ujian ini, kami memastikan GetUser() code> is Ia dipanggil sekali dan pengguna yang dijangka dikembalikan. Kami kemudian menegaskan bahawa kata laluan pengguna telah dikemas kini dengan betul. 🎜
Atas ialah kandungan terperinci Apakah senario penggunaan pemalsuan dan stubbing dalam ujian unit C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!