C++
Mock
GoogleMock ile sahte nesne kullanmayı öğrenirsin.
GoogleMock nedir?
GoogleMock (gmock), GoogleTest'le birlikte gelen bir sahte nesne (mock) çerçevesidir. Gerçek bir bağımlılığı (veritabanı, ağ, dosya) taklit eden mock sınıfları yazmanı sağlar. Böylece testleri yavaş ya da kırılgan bağımlılıklardan ayırırsın.
Bir mock sınıfı, sahte davranacağı arayüzden (interface) miras alır. MOCK_METHOD makrosu her sanal metot için bir sahte uyarlama oluşturur. EXPECT_CALL(mock, metot(...)) ile çağrı beklentisi ve dönüş değeri belirlenir. Örnek: bir Database arayüzünün get metodunu mock'lamak, testte gerçek veritabanı olmadan davranışı denetlemeyi sağlar.
Mock sınıfı yazımı
Bir mock sınıfı yazmak için önce gerçek arayüzü tanımlarsın (saf sanal metotlarla). Sonra mock sınıfı bu arayüzden miras alır ve her metot için MOCK_METHOD çağırır. MOCK_METHOD dört parça alır: dönüş türü, metot adı, bağımsız değişken listesi (parantez içinde), niteleyiciler (override).
Örnek: class MockDatabase : public Database { public: MOCK_METHOD(int, get, (const std::string& key), (override)); };. Burada get metodu mock'lanır. Testte MockDatabase db; oluşturup EXPECT_CALL(db, get("id")).WillOnce(Return(42)); ile beklenti kurarsın. Böylece db.get("id") çağrısı 42 döndürür; gerçek veritabanı gerekmez.
Uygulama MockDatabase yaz
Database arayüzünü tanımla: virtual ~Database() = default; ve virtual int get(const std::string& key) = 0;. MockDatabase sınıfını Database'den türet ve MOCK_METHOD(int, get, (const std::string& key), (override)); çağır. main içinde std::cout << "test: hazır"; yaz.
Örnek çözümü göster
#include <iostream>
#include <gtest/gtest.h>
#include <string>
class Database {
public:
virtual ~Database() = default;
virtual int get(const std::string& key) = 0;
};
class MockDatabase : public Database {
public:
MOCK_METHOD(int, get, (const std::string& key), (override));
};
int main(int argc, char** argv) {
std::cout << "test: hazır";
return 0;
}
Kendini test et
-
MOCK_METHOD makrosunu tamamla
____(int, get, (const std::string& key), (override));
Cevabı göster
MOCK_METHOD(int, get, (const std::string& key), (override));
-
Parçayı rolüne eşle
- MOCK_METHOD
- Sahte metot oluşturur
- EXPECT_CALL
- Çağrı beklentisi kurar
- class MockDatabase
- Sahte sınıf
- WillOnce(Return(42))
- Dönüş değeri belirler
-
EXPECT_CALL ne yapar?
- Mock metot çağrısına beklenti kurar
- Testi hemen durdurur
- Yeni mock sınıf oluşturur
- Çıktıyı renklendirir
Cevabı göster
Mock metot çağrısına beklenti kurar — EXPECT_CALL, mock metodun nasıl çağrılacağını ve ne döndüreceğini belirler.
Sıradaki ders: Özet - Test temelleri