CodeBlanks Logo Icon CodeBlanks

testWidgets

testWidgets ile widget render testi yazmayı öğrenirsin.

testWidgets

testWidgets, bir widget testi kaydeder. İçerisindeki WidgetTester ile pumpWidget çağırarak widget'ı render eder, expect ile doğrulama yaparsın. Test gövdesi async olur çünkü pumpWidget bir Future döner.

testWidgets('buton gosterilir', (tester) async {
  await tester.pumpWidget(MaterialApp(home: MyButton()));
  expect(find.byType(ElevatedButton), findsOneWidget);
});

expect ve Matcher

expect, gerçek değeri beklenen değerle karşılaştırır. İlk parametre gerçek değer (genelde Finder), ikincisi bir Matcher'dır. findsOneWidget tek widget bulunduğunu, findsNothing hiç bulunmadığını, findsNWidgets(3) tam N tane bulunduğunu doğrular.

Uygulama Buton testi yaz

main içinde 'buton gosterilir' adlı bir testWidgets testi yaz. pumpWidget ile MaterialApp(home: ElevatedButton(onPressed: () {}, child: Text('Tikla'))) render et. find.byType(ElevatedButton) ve findsOneWidget ile doğrula. Son olarak 'test tanimlandi' yazdır.

Başlangıç kodu

main.dart
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/material.dart';

void main() {
  // 'buton gosterilir' adlı testWidgets testi yaz
  // pumpWidget ile MaterialApp içinde ElevatedButton render et
  // find.byType ile ElevatedButton bul ve findsOneWidget ile doğrula
  // son olarak 'test tanimlandi' yazdir
}

Örnek çözüm

main.dart
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/material.dart';

void main() {
  testWidgets('buton gosterilir', (tester) async {
    await tester.pumpWidget(
      MaterialApp(
        home: ElevatedButton(
          onPressed: () {},
          child: const Text('Tikla'),
        ),
      ),
    );
    expect(find.byType(ElevatedButton), findsOneWidget);
  });
  print('test tanimlandi');
}

Beklenen çıktı

test tanimlandi

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 pumpWidget çağrısının önünde neden await kullanılır?

  • Çünkü void döner
  • Çünkü Widget döner
  • Çünkü int döner
  • Çünkü Future döner ve bitmesini beklemek gerekir Doğru cevap

Açıklama: pumpWidget bir Future döndürür; render tamamlanana kadar beklemek için await kullanılır.

2 pumpWidget çağrısı

Soru
await tester.____(MaterialApp(home: MyButton()));
Cevap
await tester.pumpWidget(MaterialApp(home: MyButton()));

Açıklama: WidgetTester.pumpWidget verilen widget'ı test ortamında render eder; pump ise bir frame ilerletir.

3 testWidgets eşleşmeleri

Kavram Anlamı
testWidgets Widget testi kaydeder
WidgetTester Test aracı
pumpWidget Widget render eder
expect Karşılaştırma yapar

İleri seviye bölümündeki tüm dersler