Örnek sorular
Sd Test Doubles MockingZorluk 1
Unit testte bir "mock" nesnesi öncelikle ne için kullanılır?
- aUygulamanın production konfigürasyon değerlerini her deploy arasında güvenle saklamak için
- bVeritabanını daha yavaş ama işlevsel olarak daha doğru bir kopyasıyla değiştirmek için
- cÜzerinde hangi metodların, hangi argümanlarla çağrıldığını doğrulamak için✓
- dTüm suite tamamen bittikten sonra nihai test raporunu biçimlendirmek için
Açıklama:Mock, nasıl çağrıldığını (hangi metod, kaç kez, hangi argümanlarla) kaydeden bir test double'dır; test daha sonra bu etkileşimleri doğrulayabilir — bu tam olarak (c)'dir. Diğer seçenekler config saklama ya da raporlama gibi ilgisiz konulardır.
Sd Test Doubles MockingZorluk 1
Test double bağlamında bir "stub"ı en iyi tanımlayan nedir?
- aSonradan davranış doğrulaması için her tek çağrıyı, tam argümanlarıyla ve sırasıyla birlikte kaydeden nesne
- bÇağrılara önceden belirlenmiş sabit yanıtlar döndüren, ama testin nasıl çağrıldığını doğrulamadığı nesne✓
- cGerçek implementasyonun süresiz olarak tamamen yerine geçen, eksiksiz çalışan alternatif bir implementasyon
- dSadece parametre listesini doldurmak için geçilen, hiçbir yerde hiçbir zaman kullanılmayan nesne
Açıklama:Stub, test edilen koda çalışabileceği sabit yanıtlar sağlar ama test, stub'ın nasıl çağrıldığını doğrulamaz — bu (b)'dir. Çağrıları doğrulama için kaydetmek mock/spy'ı tanımlar, stub'ı değil.
Sd Test Doubles MockingZorluk 1
"Fake" test double'ı en iyi tanımlayan seçenek nedir?
- aHafif ama gerçekten çalışan bir implementasyon, örneğin gerçek veritabanı yerine bellek-içi bir repository✓
- bTek amacı hangi metodların çağrıldığını kaydetmek olan nesne
- cGirdiden tamamen bağımsız her zaman aynı sabit değeri döndüren, test başına yeniden yapılandırılamayan nesne
- dTest sırasında gerçek ağ üzerinden erişilen bir production bağımlılığı
Açıklama:Fake, gerçek ve çalışan bir davranışa sahiptir ama production için uygun olmayan bir kısayol kullanır — bellek-içi repository klasik bir örnektir: gerçek bir veritabanına ihtiyaç duymadan repository gibi davranır (kaydet/sorgula), bu da (a)'dır.
Sd Test Doubles MockingZorluk 1
Bir "spy"ı sıradan bir mock'tan ayıran nedir?
- aSpy, mock'un aksine üzerine yapılan çağrıların hiçbir zaman hiçbir şekilde doğrulanmasına izin vermez
- bSpy gerçek bir nesneyi sarmalar; davranışı çalışırken doğrulamaya da izin verir✓
- cSpy sadece ve sadece network isteklerini test etmek için kullanılabilir, başka hiçbir amaçla değil
- dSpy'ın herhangi bir metodu çağrıldığında, yapılandırmadan bağımsız olarak her zaman exception fırlatır
Açıklama:Spy, gerçek bir nesneyi (kısmen ya da tamamen) sarmalar, böylece gerçek implementasyon çalışmaya devam ederken çağrılar da sonradan doğrulama için kaydedilir — gerçek davranış ile gözlemin karışımı, (b) ile eşleşir.
Sd Test Doubles MockingZorluk 1
Test double sözlüğünde bir "dummy" nesnesi nedir?
- aHer metod çağrısını kaydedip testin sonradan her birini tek tek doğrulamasına izin veren nesne
- bGerçek iş mantığını basitleştirilmiş, bellek-içi biçimde simüle edip birçok farklı testte kullanılan nesne
- cBir metod imzasını doldurmak için geçilen ama testin gerçekte hiç çağırmadığı ya da incelemediği nesne✓
- dTestin geçtiği tam olarak hangi argümanlara bağlı olarak farklı sabit değerler döndüren nesne
Açıklama:Dummy, sadece gereken bir parametre yuvasını doldurmak için var olur — test edilen kod ona bir referans tutabilir ama test hiçbir zaman onun metodlarını çağırmaz ya da durumunu kontrol etmez, bu da (c)'dir. Çağrıları kaydedip doğrulamak mock'ı tanımlar, dummy'yi değil.
Sd Test Doubles MockingZorluk 2
Bir testte mock kullanmak ile stub kullanmak arasındaki temel pratik fark nedir?
- aMock sadece Mockito ile, stub ise tamamen ayrı bir framework olan Jest ile oluşturulabilir
- bStub, ikisinin ne yapacak şekilde yapılandırıldığından bağımsız olarak test suite içinde her zaman mock'tan daha yavaş çalışır
- cPratik bir fark yoktur; terimler her bağlamda ve her mock framework'ünde tamamen birbirinin yerine geçer
- dMock kullanan testte nesnenin aldığı etkileşimler doğrulanır; stub kullanan testte ise sadece sabit verisiyle üretilen sonuç kontrol edilir✓
Açıklama:Temel ayrım, testin sonradan neyi doğruladığıdır: mock ile test, etkileşimin kendisini doğrular (ör. verify(service).sendEmail(...)); stub ile test ise sadece test edilen kodun stub'ın verisiyle ürettiği sonucu kontrol eder — bu da (d)'dir.