単体テストでは、フェイクとスタブを使用してテストの分離を作成します。フェイク: テスト対象のユニットをシミュレートし、動作を制御し、相互作用を検証します。外部依存関係やテストが困難な依存関係を置き換えるために使用されます。スタブ: 常に固定値を返すか、指定されたアクションを実行する、特別な偽のシミュレートされた関数またはメソッド。時間のかかる依存関係や不安定な依存関係を置き換えるために使用されます。
C 単体テストにおける偽造とスタブの使用シナリオ
単体テストでは、テストの分離を作成するために偽造とスタブが使用されます環境のための 2 つの強力なテクノロジー。これにより、テスト開発者は他のコンポーネントに依存せずに特定のコードをテストできます。
モック
フェイクとは、動作を制御し、相互作用を検証できる、テスト対象ユニットのシミュレートされたバージョンを作成することです。 Fake は、外部依存関係やテストが困難な依存関係を置き換えるためによく使用されます。
例:
class UserService { public: virtual User GetUser(int id) = 0; }; class UserServiceMock : public UserService { public: MOCK_METHOD(User, GetUser, (int id), (override)); };
この例では、UserServiceMock
は UserService
の偽物であり、## を制御するために使用されます。 # GetUser() メソッドの動作をテストで検証できるようにします。
スタブ (スタブ)
スタブは、常に固定値を返すか、指定されたアクションを実行する関数またはメソッドをシミュレートする特別な種類の偽造です。スタブは、時間のかかる依存関係や不安定な依存関係を置き換えるためによく使用されます。例:
// 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() が 1 回呼び出され、期待されるユーザーが返されることを確認します。次に、ユーザーのパスワードが正しく更新されたことをアサートします。
以上がC++ 単体テストにおけるフェイクとスタブの使用シナリオは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。