Mock advanced
- Dart kursu
- Uzman
- Ders 39/47
- 5 dk
Gelişmiş mock ve stub öğrenirsin.
Mock advanced
Gelişmiş mock, bir bağımlılığın davranışını taklit eder. when(mock.fetch()).thenReturn(5) ile sabit dönüş değeri; verify(mock.fetch()) ile çağrı denetimi yapılır.
Stub (koçan): çağrılınca sabit değer döner. Spy (casus): hem değer döner hem çağrıları kaydeder. Mock: çağrı beklentilerini denetler.
Bu araçlar, gerçek bir veritabanı veya API olmadan alan mantığını sınamayı sağlar. Test hızlı, tekrarlanabilir ve izoledir.
Stub ve spy ayrımı
Stub, yalnızca sabit değer döner; çağrıları kaydetmez. Hızlıdır; basit dönüş değerleri için kullanılır.
Spy, hem değer döner hem çağrıları kaydeder. spy.callCount ile kaç kez çağrıldığı okunur. Davranış denetimi gerektiğinde spy kullanılır.
Mock, spy'a ek olarak çağrı beklentilerini de denetler: verify(mock.fetch()).called(2). Yani mock = stub + spy + beklenti denetimi.
Uygulama MockUserService tanımla
Bir User sınıfı tanımla: final String name; User(this.name);. Bir class MockUserService tanımla: User _stubbed; alanı, void stubFetch(User u) { _stubbed = u; } ve User fetchUser() => _stubbed; metotları. main içinde final mock = MockUserService(); yarat; mock.stubFetch(User('Ayşe')); çağır; print(mock.fetchUser().name); ekle.
Başlangıç kodu
void main() {
// User sınıfını tanımla (name alanı)
// MockUserService sınıfını tanımla (stubFetch, fetchUser metotları)
// bir mock yarat; stub ile değer ver; fetchUser ile yazdır
}Örnek çözüm
class User {
final String name;
User(this.name);
}
class MockUserService {
User _stubbed;
void stubFetch(User u) {
_stubbed = u;
}
User fetchUser() => _stubbed;
}
void main() {
final mock = MockUserService();
mock.stubFetch(User('Ayşe'));
print(mock.fetchUser().name);
}Beklenen çıktı
Ayşe
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Mock parçalarını eşleştir
| Kavram | Anlamı |
|---|---|
Mock |
Sahte sınıf |
when |
Stub başlangıcı |
thenReturn |
Dönüş değeri |
verify |
Çağrı denetimi |
2 when(mock.fetch()).thenReturn(5) ne yapar?
- fetch'i gerçekten çalıştırır
- fetch'i yavaşlatır
- fetch'i siler
- fetch çağrılınca 5 döner Doğru cevap
Açıklama: thenReturn çağrılınca sabit değer döner.
3 thenReturn çağrısı
when(mock.fetch()).____(5);
when(mock.fetch()).thenReturn(5);
Açıklama: thenReturn ile sabit dönüş değeri verilir.