0Pricing
C++ Academy · Ders

GMock ile Taklitler

Bağımlılıkları taklit edin

GMock ile Taklitler, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.

Neden Taklit Kullanılır?

GMock, çağrıları kaydeden ve programlanmış sonuçları döndüren sahte nesneler oluşturur. Taklit kullanımı, sınanan birimi veritabanları veya ağlar gibi yavaş ya da öngörülemeyen bağımlılıklardan yalıtır.

Bir Arayüzle Başlama

Taklit edilebilir bağımlılıklar genellikle sanal yöntemlere sahip soyut temel sınıflardır.

#include <string>

class Database {
public:
    virtual ~Database() = default;
    virtual std::string get(int id) = 0;
    virtual bool save(const std::string& v) = 0;
};

Bir Taklit Sınıfı Tanımlama

Her sanal yöntem için bir taklit oluşturmak üzere MOCK_METHOD kullanın; dönüş türünü, adı, bağımsız değişkenleri ve niteleyicileri belirtin.

#include <gmock/gmock.h>
#include <string>

class Database {
public:
    virtual ~Database() = default;
    virtual std::string get(int id) = 0;
};

class MockDatabase : public Database {
public:
    MOCK_METHOD(std::string, get, (int id), (override));
};

Beklentileri Ayarlama

EXPECT_CALL, bir taklit yönteminin nasıl çağrılması gerektiğini ve ne döndüreceğini belirtir. WillOnce(Return(...)) sonucu programlar.

#include <gmock/gmock.h>
using ::testing::Return;

TEST(DbTest, ReturnsValue) {
    MockDatabase db;
    EXPECT_CALL(db, get(1)).WillOnce(Return("alice"));
    EXPECT_EQ(db.get(1), "alice");
}

Argüman Eşleştiricileri

Beklentiler, _ (herhangi biri), Gt(5) veya HasSubstr("x") gibi eşleştiricilerle argümanları esnek biçimde eşleştirebilir.

#include <gmock/gmock.h>
using ::testing::_;
using ::testing::Return;

TEST(DbTest, AnyId) {
    MockDatabase db;
    EXPECT_CALL(db, get(_)).WillRepeatedly(Return("x"));
    EXPECT_EQ(db.get(99), "x");
}

Çağrı Sayısı

Bir çağrının kaç kez beklendiğini Times ile belirtin.

  • Times(1) tam olarak bir kez
  • Times(AtLeast(2)) en az iki kez
  • Times(0) hiçbir zaman çağrılmamalıdır
#include <gmock/gmock.h>
using ::testing::AtLeast;
using ::testing::Return;

TEST(DbTest, CalledTwice) {
    MockDatabase db;
    EXPECT_CALL(db, get(1)).Times(AtLeast(2)).WillRepeatedly(Return("v"));
    db.get(1);
    db.get(1);
}

Dönüş Eylemleri

Eylemler davranışı belirler.

  • Return(value)
  • ReturnRef(ref)
  • Throw(exception)
  • Özel kodu çalıştırmak için Invoke(callable)

Sahte Nesneyi Enjekte Etme

Sınanan birim, bağımlılığı arayüzün işaretçisi veya başvurusu üzerinden kabul etmelidir. Buna bağımlılık enjeksiyonu denir ve sahte nesneleri mümkün kılan şey budur.

#include <string>

class Database;

class UserService {
    Database& db;
public:
    UserService(Database& d) : db(d) {}
    std::string name(int id);
};

Etkileşimleri Doğrulama

GMock, sahte nesne yok edildiğinde tüm EXPECT_CALL beklentilerini doğrular. Karşılanmayan beklentiler (yanlış sayı veya eksik çağrılar) sınamanın otomatik olarak başarısız olmasına neden olur.

Nazik, Katı ve Uyarıcı Sahte Nesneler

Beklenmeyen çağrıların nasıl ele alınacağını denetleyin.

  • NiceMock: ilgi çekmeyen çağrıları yok sayar
  • StrictMock: beklenmeyen her çağrı başarısız olur
  • Varsayılan (uyarıcı): ilgi çekmeyen çağrılarda uyarır

Yalnızca Sahip Olduğunuzu Taklit Edin

Üçüncü taraf somut sınıfları yerine kendi arayüzlerinizi taklit etmeyi tercih edin. Sınamaların kararlı kalması için harici kitaplıkların çevresine ince sarmalayıcı arayüzler ekleyin.

Hızlı Kontrol

GMock'un beklentileri ne zaman denetlediğini hatırlayın.

Özet

GMock'u öğrendiniz.

  • Sanal arayüzleri MOCK_METHOD ile taklit etme
  • EXPECT_CALL ve eylemlerle davranışı programlama
  • Eşleştiriciler ve Times ile argümanları ve çağrı sayısını denetleme
  • Sahte nesneleri enjekte etme; beklentiler yok edilme sırasında doğrulanır

Sıkça Sorulan Sorular

“GMock ile Taklitler” dersi ücretsiz mi?

Evet — “GMock ile Taklitler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.

“GMock ile Taklitler” dersinde ne öğreneceğim?

Bağımlılıkları taklit edin C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C++ Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“GMock ile Taklitler” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. GTest Kurulumu
  2. Doğrulamalar ve Eşleştiriciler
  3. Test Düzenekleri ve Kurulum
  4. GMock ile Taklitler
← C++ Academy Sayfasına Dön