Test Çiftleri: Taklitler ve Taslaklar
Test edilebilirlik ve bağımlılık enjeksiyonu için arayüzler
Test Çiftleri: Taklitler ve Taslaklar, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 3. 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, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.
Sınama taklitlerine genel bakış
Sınama taklidi, sınamalarda gerçek bir bağımlılığın yerini alır. Türler: sabit yanıtlı taklit (önceden belirlenmiş yanıtlar döndürür), etkileşim taklidi (etkileşimleri doğrular), izleyici (çağrıları kaydeder), sahte uygulama (bellekte çalışan uygulama).
Arayüzler sınama taklitlerini mümkün kılar
İşlevleri somut türler yerine arayüzleri kabul edecek şekilde tasarlayın. Üretimde gerçek uygulamayı, sınamalarda ise bir sınama taklidini aktarın.
type UserStore interface {
FindByID(id int) (*User, error)
}
func GetUser(store UserStore, id int) (*User, error) {
return store.FindByID(id)
}Elle yazılmış sabit yanıtlı taklit
Sabit yanıtlı taklit, bir arayüzü uygulayan ve önceden yapılandırılmış değerleri döndüren basit bir yapıdır:
type stubStore struct{ user *User; err error }
func (s *stubStore) FindByID(_ int) (*User, error) { return s.user, s.err }
// In test:
store := &stubStore{user: &User{Name: "Alice"}}
result, _ := GetUser(store, 1)Elle yazılmış etkileşim taklidi
Etkileşim taklidi çağrıları kaydeder ve bunlar üzerinde doğrulama yapar:
type mockStore struct {
called bool
gotID int
user *User
}
func (m *mockStore) FindByID(id int) (*User, error) {
m.called = true; m.gotID = id
return m.user, nil
}
// Assert: if !mock.called { t.Error(...) }testify/mock
testify/mock paketi, çağrı beklentileri ve dönüş değeri yapılandırmasıyla etkileşim taklidi nesneleri oluşturur veya bunları yazmanıza olanak tanır:
type MockStore struct { mock.Mock }
func (m *MockStore) FindByID(id int) (*User, error) {
args := m.Called(id)
return args.Get(0).(*User), args.Error(1)
}
// In test:
m := new(MockStore)
m.On("FindByID", 1).Return(&User{}, nil)
m.AssertExpectations(t)gomock
go.uber.org/mock/gomock (önceden golang/mock), arayüzlerden etkileşim taklitleri oluşturur. Oluşturmak için mockgen CLI aracını, beklentileri ayarlamak için EXPECT() kullanın.
Sahte uygulama
Sahte uygulama, bellekte çalışan bir uygulamadır. Örneğin, kullanıcıları bir eşlemede depolayan bellek içi bir kullanıcı deposu olabilir. Sahte uygulamaların yazılması daha zahmetlidir; ancak etkileşim taklitlerinden daha gerçekçi ve daha az kırılgandır.
type fakeStore struct{ users map[int]*User }
func (f *fakeStore) FindByID(id int) (*User, error) {
u, ok := f.users[id]
if !ok { return nil, ErrNotFound }
return u, nil
}HTTP istemcileri için httptest
net/http/httptest, işlem içinde çalışan bir HTTP sınama sunucusu ve kaydedicisi sağlar — HTTP tabanlı bağımlılıklar için standart sahte uygulamadır.
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
json.NewEncoder(w).Encode(User{Name: "Alice"})
}))
defer ts.Close()Her taklidin ne zaman kullanılacağı
Sabit yanıtlı taklit: basit, sabit yanıt. Etkileşim taklidi: çağrı sayısını ve bağımsız değişkenleri doğrular. Sahte uygulama: karmaşık davranış. Aşırı etkileşim taklidinden kaçının — tümleştirme sınamalarında sahte uygulamalar ve gerçek bileşenler daha güvenilirdir.
Kırılgan sınamalardan kaçınma
Kesin çağrı sırasını veya bağımsız değişken değerlerini doğrulayan etkileşim taklitleri, uygulama geliştikçe kırılgan hâle gelir. Mümkün olduğunda çıktı doğrulamalarına sahip sabit yanıtlı taklitleri veya sahte uygulamaları tercih edin.
Arayüz keşfi
Arayüzleri, çağıranlar tarafından kullanılan somut türün yüzeyini belirledikten sonra çıkarın (ISP). Go, örtük arayüz uyumluluğunu destekler — somut türde herhangi bir değişiklik yapılması gerekmez.
Hızlı Kontrol
Sabit yanıtlı taklit ile etkileşim taklidi arasındaki temel fark nedir?
Özet: Sınama Taklitleri
Temel noktalar:
- Sınama taklitlerini mümkün kılmak için arayüzlere göre tasarlayın
- Sabit yanıtlı taklit: önceden belirlenmiş verileri döndürür; etkileşim taklidi: etkileşimleri doğrular
- HTTP için httptest; depolama için bellek içi sahte uygulamalar
- Aşırı etkileşim taklidinden kaçının — karmaşık davranışlar için sahte uygulamaları tercih edin
Sıkça Sorulan Sorular
“Test Çiftleri: Taklitler ve Taslaklar” dersi ücretsiz mi?
Evet — “Test Çiftleri: Taklitler ve Taslaklar” 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 Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.
“Test Çiftleri: Taklitler ve Taslaklar” dersinde ne öğreneceğim?
Test edilebilirlik ve bağımlılık enjeksiyonu için arayüzler Go 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.
Go Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Go 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 3. dersidir.
“Test Çiftleri: Taklitler ve Taslaklar” 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 Go Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Go 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
- testing ile Birim Testleri Yazma
- Tablo Tabanlı Testler
- Test Çiftleri: Taklitler ve Taslaklar
- Test Kapsamı ve testify